瀏覽代碼

fix 扫码登录

he2802 3 年之前
父節點
當前提交
eb10a3e907

+ 8 - 5
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxLoginController.java

@@ -87,9 +87,11 @@ public class WxLoginController
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         String scanCode = loginBody.getScanCode();
         String key = "SCAN_LOGIN_"+scanCode;
-        Long userId = redisCache.getCacheObject(key);
-        if(Validator.isNotEmpty(userId)&&userId.equals(-2L)){
+        String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录
+        Long status = redisCache.getCacheObject(keyStatus);
+        if(Validator.isNotEmpty(status)&&status.equals(1L)){
             redisCache.setCacheObject(key, loginUser.getUser().getUserId(),60, TimeUnit.SECONDS);//60秒锁定
+            redisCache.setCacheObject(keyStatus, 2L,60, TimeUnit.SECONDS);//60秒锁定
             return AjaxResult.success();
         }else{
             return AjaxResult.error("校验码不存在或已过期");
@@ -110,11 +112,12 @@ public class WxLoginController
     {
         String scanCode = loginBody.getScanCode();
         String key = "SCAN_LOGIN_"+scanCode;
-        Long userId = redisCache.getCacheObject(key);
-        if(Validator.isEmpty(userId)){
+        String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录
+        Long status = redisCache.getCacheObject(keyStatus);
+        if(Validator.isEmpty(status)){
             return AjaxResult.error("标识码不存在");
         }else{
-            redisCache.setCacheObject(key, -2L,180, TimeUnit.SECONDS);//延长180秒锁定
+            redisCache.setCacheObject(keyStatus, 1L,180, TimeUnit.SECONDS);//延长180秒锁定
             return AjaxResult.success();
         }
     }

+ 7 - 3
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -113,6 +113,7 @@ public class WxLoginService
     public Map<String,Object> pcLoginUrl(){
         String scanCode = ToolsUtils.getCharAndNumr(6);
         String key = "SCAN_LOGIN_"+scanCode;
+        String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录
         String codeUrl = scanLoginHost+"pc/login/"+scanCode;
         String urlBase64 = null;
         try {
@@ -128,7 +129,8 @@ public class WxLoginService
         } catch (Exception e) {
             e.printStackTrace();
         }
-        redisCache.setCacheObject(key, -1L,180, TimeUnit.SECONDS);//180秒锁定
+        redisCache.setCacheObject(key, 0L,180, TimeUnit.SECONDS);//180秒锁定
+        redisCache.setCacheObject(keyStatus, 0L,180, TimeUnit.SECONDS);//180秒锁定
         Map<String,Object> map = new HashMap<>();
         map.put("scanCode",scanCode);
         map.put("urlBase64",urlBase64);
@@ -142,11 +144,13 @@ public class WxLoginService
      */
     public Map<String,Object> checkPcLogin(String scanCode) {
         String key = "SCAN_LOGIN_"+scanCode;
+        String keyStatus = "SCAN_LOGIN_STATUS_"+scanCode; //0未扫码 1已扫码 2已登录
         Long userId = redisCache.getCacheObject(key);
-        if(Validator.isNotEmpty(userId)&&userId.equals(-2L)){
+        Long status = redisCache.getCacheObject(keyStatus);
+        if(Validator.isNotEmpty(status)&&status.equals(1L)){
             throw new CustomException("小程序已扫码");
         }
-        else if(Validator.isNotEmpty(userId)&&userId.longValue()>0L){
+        else if(Validator.isNotEmpty(status)&&status.equals(2L)){
             User user = iUserService.getOne(new LambdaQueryWrapper<User>().eq(User::getUserId, userId).last("limit 1"));
             if(Validator.isEmpty(user)){
                 throw new CustomException("暂未登录");