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) {
|
private void completeQrLogin(String token, Integer userId, Integer tenantId) {
|
||||||
try {
|
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();
|
JSONObject qrLoginData = new JSONObject();
|
||||||
|
qrLoginData.put("token", token);
|
||||||
qrLoginData.put("status", "confirmed");
|
qrLoginData.put("status", "confirmed");
|
||||||
qrLoginData.put("userId", userId);
|
qrLoginData.put("userId", userId);
|
||||||
qrLoginData.put("tenantId", tenantId);
|
qrLoginData.put("tenantId", tenantId);
|
||||||
qrLoginData.put("confirmTime", System.currentTimeMillis());
|
qrLoginData.put("confirmTime", System.currentTimeMillis());
|
||||||
// 保存1分钟,给前端足够时间获取
|
// 保存60秒
|
||||||
redisUtil.set(redisKey, qrLoginData.toJSONString(), 60L, TimeUnit.SECONDS);
|
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) {
|
} catch (Exception e) {
|
||||||
log.error("完成扫码登录失败: {}", e.getMessage());
|
log.error("完成扫码登录失败: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user