fix(system): 优化扫码登录状态更新逻辑
- 修改Redis键命名为更规范的格式 - 先尝试获取已有扫码登录数据并解析更新 - 只有在无现有数据时才创建新的扫码登录记录 - 统一设置状态为confirmed,保证有效期60秒 - 增加日志区分新建与更新扫码登录完成情况 - 捕获异常并记录错误日志完善容错处理
This commit is contained in:
@@ -296,16 +296,32 @@ public class WxOfficialController extends BaseController {
|
||||
*/
|
||||
private void completeQrLogin(String token, Integer userId, Integer tenantId) {
|
||||
try {
|
||||
// 更新扫码登录状态
|
||||
String redisKey = "QR_LOGIN_TOKEN:" + token;
|
||||
// 获取已有的扫码登录数据
|
||||
String redisKey = "qr-login:token:" + token;
|
||||
String existingData = redisUtil.get(redisKey);
|
||||
|
||||
// 如果有现有数据,解析后更新
|
||||
if (StrUtil.isNotBlank(existingData)) {
|
||||
JSONObject jsonData = JSONObject.parseObject(existingData);
|
||||
jsonData.put("status", "confirmed");
|
||||
jsonData.put("userId", userId);
|
||||
jsonData.put("tenantId", tenantId);
|
||||
jsonData.put("confirmTime", System.currentTimeMillis());
|
||||
// 保存60秒,给前端足够时间获取
|
||||
redisUtil.set(redisKey, jsonData.toJSONString(), 60L, TimeUnit.SECONDS);
|
||||
System.out.println("扫码登录完成,token=" + token + ", userId=" + userId);
|
||||
} else {
|
||||
// 没有现有数据,创建一个新的
|
||||
JSONObject qrLoginData = new JSONObject();
|
||||
qrLoginData.put("token", token);
|
||||
qrLoginData.put("status", "confirmed");
|
||||
qrLoginData.put("userId", userId);
|
||||
qrLoginData.put("tenantId", tenantId);
|
||||
qrLoginData.put("confirmTime", System.currentTimeMillis());
|
||||
// 保存1分钟,给前端足够时间获取
|
||||
// 保存60秒
|
||||
redisUtil.set(redisKey, qrLoginData.toJSONString(), 60L, TimeUnit.SECONDS);
|
||||
System.out.println("扫码登录完成,token=" + token + ", userId=" + userId);
|
||||
System.out.println("扫码登录完成(新建),token=" + token + ", userId=" + userId);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("完成扫码登录失败: {}", e.getMessage());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user