fix: unify email identity sync and retry first-bind defaults

This commit is contained in:
IanShaw027
2026-04-21 01:00:59 +08:00
parent 7a9488ff37
commit ea27ac6fd7
7 changed files with 154 additions and 78 deletions

View File

@@ -161,33 +161,6 @@ type userAuthIdentityReader interface {
ListUserAuthIdentities(ctx context.Context, userID int64) ([]UserAuthIdentityRecord, error)
}
type emailAuthIdentitySynchronizer interface {
EnsureEmailAuthIdentity(ctx context.Context, userID int64, email string) error
ReplaceEmailAuthIdentity(ctx context.Context, userID int64, oldEmail, newEmail string) error
}
func ensureEmailAuthIdentitySync(ctx context.Context, repo UserRepository, userID int64, email string) error {
syncer, ok := repo.(emailAuthIdentitySynchronizer)
if !ok {
return nil
}
return syncer.EnsureEmailAuthIdentity(ctx, userID, email)
}
func replaceEmailAuthIdentitySync(ctx context.Context, repo UserRepository, userID int64, oldEmail, newEmail string) error {
oldNormalized := strings.ToLower(strings.TrimSpace(oldEmail))
newNormalized := strings.ToLower(strings.TrimSpace(newEmail))
if oldNormalized == newNormalized {
return nil
}
syncer, ok := repo.(emailAuthIdentitySynchronizer)
if !ok {
return nil
}
return syncer.ReplaceEmailAuthIdentity(ctx, userID, oldEmail, newEmail)
}
// ChangePasswordRequest 修改密码请求
type ChangePasswordRequest struct {
CurrentPassword string `json:"current_password"`
@@ -281,7 +254,6 @@ func (s *UserService) UpdateProfile(ctx context.Context, userID int64, req Updat
return nil, fmt.Errorf("get user: %w", err)
}
oldConcurrency := user.Concurrency
oldEmail := user.Email
// 更新字段
if req.Email != nil {
@@ -326,9 +298,6 @@ func (s *UserService) UpdateProfile(ctx context.Context, userID int64, req Updat
if err := s.userRepo.Update(ctx, user); err != nil {
return nil, fmt.Errorf("update user: %w", err)
}
if err := replaceEmailAuthIdentitySync(ctx, s.userRepo, user.ID, oldEmail, user.Email); err != nil {
return nil, fmt.Errorf("sync email auth identity: %w", err)
}
if s.authCacheInvalidator != nil && user.Concurrency != oldConcurrency {
s.authCacheInvalidator.InvalidateAuthCacheByUserID(ctx, userID)
}