From e5d28b808de412d173d5e5f49586d2872a4e4a1e Mon Sep 17 00:00:00 2001 From: ncs19960831 <17774506+ncs19960831@users.noreply.github.com> Date: Wed, 26 Feb 2025 21:00:10 +0800 Subject: [PATCH] refactor: improve user cache management and password migration --- admin/user.go | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/admin/user.go b/admin/user.go index d201b2f..112fce7 100644 --- a/admin/user.go +++ b/admin/user.go @@ -113,19 +113,40 @@ func getUsersForm(db *sql.DB, page int64, search string) PaginationForm { } } +// clearUserCache clears all cache keys starting with nio:user: +func clearUserCache(cache *redis.Client) error { + ctx := context.Background() + iter := cache.Scan(ctx, 0, "nio:user:*", 100).Iterator() + for iter.Next(ctx) { + if err := cache.Del(ctx, iter.Val()).Err(); err != nil { + return fmt.Errorf("failed to delete cache key %s: %v", iter.Val(), err) + } + } + return iter.Err() +} + func passwordMigration(db *sql.DB, cache *redis.Client, id int64, password string) error { password = strings.TrimSpace(password) if len(password) < 6 || len(password) > 36 { return fmt.Errorf("password length must be between 6 and 36") } + hash_passwd := utils.Sha2Encrypt(password) + // Update password in database _, err := globals.ExecDb(db, ` UPDATE auth SET password = ? WHERE id = ? - `, utils.Sha2Encrypt(password), id) + `, hash_passwd, id) - cache.Del(context.Background(), fmt.Sprint("nio:user:root")) + if err != nil { + return err + } - return err + // Clear all user related cache + if err := clearUserCache(cache); err != nil { + return fmt.Errorf("failed to clear user cache: %v", err) + } + + return nil } func emailMigration(db *sql.DB, id int64, email string) error { @@ -228,7 +249,10 @@ func UpdateRootPassword(db *sql.DB, cache *redis.Client, password string) error return err } - cache.Del(context.Background(), fmt.Sprint("nio:user:root")) + // Clear all user related cache + if err := clearUserCache(cache); err != nil { + return fmt.Errorf("failed to clear user cache: %v", err) + } return nil }