From 698ae84adaf1b8d0e8dd61d7279863fe17c1e81d Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期四, 23 一月 2025 14:20:39 +0800
Subject: [PATCH] 1

---
 ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java |   40 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 39 insertions(+), 1 deletions(-)

diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
index e83b91a..76df49e 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -23,14 +23,18 @@
 import com.ruoyi.company.api.model.RegisterUser;
 import com.ruoyi.system.api.RemoteUserService;
 import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.AppUser;
 import com.ruoyi.system.api.model.LoginUser;
 import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
+import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * 登录校验方法
@@ -164,12 +168,13 @@
                 throw new ServiceException("验证码错误");
             }
             String[] split = captcha.split(":");
-            long l = Long.parseLong(split[2]);
+            long l = Long.parseLong(split[1]);
             long l1 = System.currentTimeMillis();
             // 判断是否大于两分钟
             if (l1 - l > 2 * 60 * 1000) {
                 throw new CaptchaException("验证码已失效");
             }
+            captcha = split[0];
             if (!smsCode.equalsIgnoreCase(captcha)) {
                 throw new CaptchaException("验证码错误");
             }
@@ -214,12 +219,45 @@
     public void resetPwd(RegisterUser registerUser) {
         User user = check(registerUser);
 
+        String verifyKey = CacheConstants.PHONE_CODE_KEY + StringUtils.nvl(registerUser.getPhone(), "");
+        String captcha = redisService.getCacheObject(verifyKey);
+        if (captcha == null) {
+            throw new CaptchaException("验证码错误");
+        }
+        String[] split = captcha.split(":");
+
+
+        long l = Long.parseLong(split[1]);
+        long l1 = System.currentTimeMillis();
+        // 判断是否大于两分钟
+        if (l1 - l > 2 * 60 * 1000) {
+            throw new CaptchaException("验证码已失效");
+        }
+        captcha = split[0];
+        if (!registerUser.getCode().equalsIgnoreCase(captcha)) {
+            throw new CaptchaException("验证码错误");
+        }
+
         String password = SecurityUtils.encryptPassword(registerUser.getPassword());
         user.setPassword(password);
         R<Void> r = remoteCompanyUserService.updateUser(user, SecurityConstants.INNER);
         if (R.isError(r)) {
             throw new ServiceException(r.getMsg());
         }
+        forceLogout(user.getUserId());
+    }
+
+    public void forceLogout(Long userId) {
+        Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
+        for (String key : keys) {
+            Object user = redisService.getCacheObject(key);
+            if (user instanceof AppUser) {
+                AppUser appUser = (AppUser) user;
+                if (appUser.getUserId().equals(userId)) {
+                    redisService.deleteObject(key);
+                }
+            }
+        }
     }
 
 

--
Gitblit v1.7.1