diff --git a/internal/logic/public/user/bindEmailWithVerificationLogic.go b/internal/logic/public/user/bindEmailWithVerificationLogic.go index d79ebc5..b396162 100644 --- a/internal/logic/public/user/bindEmailWithVerificationLogic.go +++ b/internal/logic/public/user/bindEmailWithVerificationLogic.go @@ -200,7 +200,7 @@ func (l *BindEmailWithVerificationLogic) BindEmailWithVerification(req *types.Bi // } } // 4. 生成新的JWT token - token, err := l.generateTokenForUser(emailUserId) + token, err := l.generateTokenForUser(emailUserId, deviceIdentifier) if err != nil { l.Errorw("生成JWT token失败", logger.Field("error", err.Error()), logger.Field("email_user_id", emailUserId)) return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "生成JWT token失败") @@ -428,12 +428,12 @@ func (l *BindEmailWithVerificationLogic) transferDeviceToEmailUser(deviceUserId, } // 4. 生成新的JWT token - token, err := l.generateTokenForUser(emailUserId) + token, err := l.generateTokenForUser(emailUserId, deviceIdentifier) if err != nil { return nil, err } - // 5. 强制清除邮箱用户的所有相关缓存(确保获取最新数据)// 清除邮箱用户缓存 + // 5. 强制清除邮箱用户的所有相关缓存(确保获取最新数据) emailUser, _ := l.svcCtx.UserModel.FindOne(l.ctx, emailUserId) if emailUser != nil { // 清除用户的批量相关缓存(包括设备、认证方法等) @@ -454,7 +454,7 @@ func (l *BindEmailWithVerificationLogic) transferDeviceToEmailUser(deviceUserId, } // generateTokenForUser 为指定用户生成JWT token -func (l *BindEmailWithVerificationLogic) generateTokenForUser(userId int64) (string, error) { +func (l *BindEmailWithVerificationLogic) generateTokenForUser(userId int64, deviceIdentifier string) (string, error) { // 生成JWT token accessExpire := l.svcCtx.Config.JwtAuth.AccessExpire sessionId := uuidx.NewUUID().String() @@ -479,6 +479,17 @@ func (l *BindEmailWithVerificationLogic) generateTokenForUser(userId int64) (str // session缓存失败不影响token生成,只记录错误 } + // 设置设备缓存映射 (identifier -> sessionId) + if deviceIdentifier != "" { + deviceCacheKey := fmt.Sprintf("%v:%v", config.DeviceCacheKeyKey, deviceIdentifier) + if err := l.svcCtx.Redis.Set(l.ctx, deviceCacheKey, sessionId, time.Duration(accessExpire)*time.Second).Err(); err != nil { + l.Errorw("设置设备缓存失败", logger.Field("error", err.Error()), logger.Field("device_identifier", deviceIdentifier)) + // 不影响主流程,只记录错误 + } else { + l.Infow("更新设备Session映射成功", logger.Field("device_identifier", deviceIdentifier), logger.Field("session_id", sessionId)) + } + } + l.Infow("为用户生成token成功", logger.Field("user_id", userId)) return jwtToken, nil }