fix
All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 6m2s

This commit is contained in:
shanshanzhong 2026-01-15 01:56:18 -08:00
parent ea613b5265
commit cd0ef80d15

View File

@ -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
}