修改绑定邮箱接口返回登录凭证,优化用户数据迁移流程 添加用户缓存清理逻辑,确保设备绑定后数据一致性 完善邮箱验证和绑定逻辑的注释和错误处理
This commit is contained in:
@@ -187,6 +187,28 @@ func (l *BindDeviceLogic) createDeviceForUser(identifier, ip, userAgent string,
|
||||
return err
|
||||
}
|
||||
|
||||
// 清理用户缓存,确保新设备能正确显示在用户的设备列表中
|
||||
userInfo, err := l.svcCtx.UserModel.FindOne(l.ctx, userId)
|
||||
if err != nil {
|
||||
l.Errorw("failed to find user for cache clearing",
|
||||
logger.Field("user_id", userId),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
// 不因为缓存清理失败而返回错误,因为设备创建已经成功
|
||||
} else {
|
||||
if err := l.svcCtx.UserModel.ClearUserCache(l.ctx, userInfo); err != nil {
|
||||
l.Errorw("failed to clear user cache",
|
||||
logger.Field("user_id", userId),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
// 不因为缓存清理失败而返回错误,因为设备创建已经成功
|
||||
} else {
|
||||
l.Infow("cleared user cache after device creation",
|
||||
logger.Field("user_id", userId),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// 记录设备创建成功的日志
|
||||
l.Infow("device created successfully",
|
||||
logger.Field("identifier", identifier),
|
||||
@@ -321,6 +343,51 @@ func (l *BindDeviceLogic) rebindDeviceToNewUser(deviceInfo *user.Device, ip, use
|
||||
return err
|
||||
}
|
||||
|
||||
// 清理新用户的缓存,确保用户信息能正确更新
|
||||
// 这是关键步骤:设备迁移后必须清理缓存,否则用户看到的还是旧的设备列表
|
||||
newUser, err := l.svcCtx.UserModel.FindOne(l.ctx, newUserId)
|
||||
if err != nil {
|
||||
l.Errorw("failed to find new user for cache clearing",
|
||||
logger.Field("new_user_id", newUserId),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
// 不因为缓存清理失败而返回错误,因为数据迁移已经成功
|
||||
} else {
|
||||
if err := l.svcCtx.UserModel.ClearUserCache(l.ctx, newUser); err != nil {
|
||||
l.Errorw("failed to clear new user cache",
|
||||
logger.Field("new_user_id", newUserId),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
// 不因为缓存清理失败而返回错误,因为数据迁移已经成功
|
||||
} else {
|
||||
l.Infow("cleared new user cache after device rebinding",
|
||||
logger.Field("new_user_id", newUserId),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// 清理原用户的缓存(如果原用户没有被禁用的话)
|
||||
oldUser, err := l.svcCtx.UserModel.FindOne(l.ctx, oldUserId)
|
||||
if err != nil {
|
||||
l.Errorw("failed to find old user for cache clearing",
|
||||
logger.Field("old_user_id", oldUserId),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
// 不因为缓存清理失败而返回错误
|
||||
} else {
|
||||
if err := l.svcCtx.UserModel.ClearUserCache(l.ctx, oldUser); err != nil {
|
||||
l.Errorw("failed to clear old user cache",
|
||||
logger.Field("old_user_id", oldUserId),
|
||||
logger.Field("error", err.Error()),
|
||||
)
|
||||
// 不因为缓存清理失败而返回错误
|
||||
} else {
|
||||
l.Infow("cleared old user cache after device rebinding",
|
||||
logger.Field("old_user_id", oldUserId),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// 记录设备重新绑定成功的日志
|
||||
l.Infow("device rebound successfully",
|
||||
logger.Field("identifier", deviceInfo.Identifier),
|
||||
|
||||
Reference in New Issue
Block a user