From f991c73f56f35665bcbe8ce2252c04ea82032b10 Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期一, 27 五月 2024 18:06:31 +0800
Subject: [PATCH] feat: 修复登录bug;数据校验规则优化

---
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index 275d931..ca27eae 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -145,7 +145,7 @@
     public LoginUserParent getLoginUserStudy() {
         LoginUserParent userStudy = getLoginUserStudy(ServletUtils.getRequest());
         if (null == userStudy) {
-            throw new StudyLoginException("登录失效,请重新登录!", 505);
+            throw new StudyLoginException("登录失效,请重新登录!", 504);
         }
         return userStudy;
     }
@@ -219,6 +219,10 @@
         if (StringUtils.isNotEmpty(token)) {
             String userkey = JwtUtils.getUserKeyStudy(token);
             user = redisService.getCacheObject(getTokenKeyStudy(userkey));
+            // 再次判断登录状态是否已过期
+            if (null == user) {
+                throw new StudyLoginException("登录信息已过期,请重新登录!", 504);
+            }
             // 优先判断当前账号是否已在其他设备登录
             if (!user.getIsCanLogin()) {
                 throw new StudyLoginException("当前登录账号在其他设备登录!", 505);
@@ -345,6 +349,10 @@
             LoginUserParent redisUserInfo = JSONObject.parseObject(JSONObject.toJSONString(redisCacheUserInfo), LoginUserParent.class);
             // 单点逻辑,如果当前用户已处于登录状态并再次登录,则清除该用户上一次登录token
             if (dto.getUserid().equals(redisUserInfo.getUserid())) {
+                // 被挤账户 可登录状态 已经为 false时,跳出循环
+                if (!redisUserInfo.getIsCanLogin()) {
+                    continue;
+                }
                 // 设置能否登录字段为 否,当该token登录时,isCanLogin为false表示账号被挤
                 redisUserInfo.setIsCanLogin(Boolean.FALSE);
                 redisService.setCacheObject(strKey, redisUserInfo, redisService.getExpire(strKey), TimeUnit.SECONDS);

--
Gitblit v1.7.1