ソースを参照

feat: 微信登录逻辑调整;

hanchaolong 3 日 前
コミット
558f15a26f

+ 1 - 1
jd-logistics-auth/src/main/java/com/ruoyi/auth/controller/WxMiniController.java

@@ -27,7 +27,7 @@ public class WxMiniController {
     @PostMapping("login")
     public R<?> login(@RequestBody LoginBody form) {
         // 用户登录
-        LoginUser userInfo = sysLoginService.openIdLogin(form.getUsername(), form.getOpenId());
+        LoginUser userInfo = sysLoginService.openIdLogin(form.getJsCode(), form.getCode());
         // 获取登录token
         return R.ok(tokenService.createToken(userInfo));
     }

+ 19 - 6
jd-logistics-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java

@@ -18,9 +18,14 @@ public class LoginBody
     private String password;
 
     /**
-     * 微信小程序openId
+     * 微信openid获取jscode
      */
-    private String openId;
+    private String jsCode;
+
+    /**
+     * 微信手机号获取code
+     */
+    private String code;
 
     public String getUsername()
     {
@@ -42,11 +47,19 @@ public class LoginBody
         this.password = password;
     }
 
-    public String getOpenId() {
-        return openId;
+    public String getJsCode() {
+        return jsCode;
+    }
+
+    public void setJsCode(String jsCode) {
+        this.jsCode = jsCode;
+    }
+
+    public String getCode() {
+        return code;
     }
 
-    public void setOpenId(String openId) {
-        this.openId = openId;
+    public void setCode(String code) {
+        this.code = code;
     }
 }

+ 21 - 7
jd-logistics-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java

@@ -158,25 +158,36 @@ public class SysLoginService
     /**
      * 登录
      */
-    public LoginUser openIdLogin(String username, String openId)
+    public LoginUser openIdLogin(String jsCode, String code)
     {
         // 用户名或密码为空 错误
-        if (StringUtils.isAnyBlank(username, openId))
+        if (StringUtils.isAnyBlank(jsCode, code))
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/openId必须填写");
-            throw new ServiceException("用户/openId必须填写");
+            recordLogService.recordLogininfor("", Constants.LOGIN_FAIL, "微信小程序登录失败");
+            throw new ServiceException("登录失败,请联系管理员");
         }
         // IP黑名单校验
         String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
         if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
         {
-            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
+            recordLogService.recordLogininfor("", Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
             throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
         }
-        // 查询用户信息
+        R<String> openIdData = remoteUserService.getOpenId(jsCode, SecurityConstants.INNER);
+        if (StringUtils.isBlank(openIdData.getData())) {
+            throw new ServiceException("登录失败,请联系管理员");
+        }
+        R<String> phoneNumber = remoteUserService.getPhoneNumber(code, SecurityConstants.INNER);
+        if (StringUtils.isBlank(phoneNumber.getData())) {
+            throw new ServiceException("登录失败,请联系管理员");
+        }
+
         SysUser sysUser = new SysUser();
-        sysUser.setUserName(username);
+        String username = phoneNumber.getData();
+        String openId = openIdData.getData();
         sysUser.setOpenId(openId);
+        sysUser.setUserName(username);
+        // 查询用户信息
         R<LoginUser> userResult = remoteUserService.getUserByOpenId(sysUser, SecurityConstants.INNER);
 
         if (R.FAIL == userResult.getCode())
@@ -198,6 +209,9 @@ public class SysLoginService
         }
         recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
         recordLoginInfo(user.getUserId());
+
         return userInfo;
     }
+
+
 }

+ 4 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/WxMiniController.java

@@ -50,11 +50,14 @@ public class WxMiniController {
     @InnerAuth
     @PostMapping("/getUserByOpenId")
     public R<LoginUser> getUserByOpenId(@RequestBody SysUser sysUser) {
-        SysUser currentUser = sysUserService.selectUserByOpenId(sysUser);
+        SysUser currentUser = sysUserService.selectUserByUserName(sysUser.getUserName());
         if (StringUtils.isNull(sysUser))
         {
             return R.fail("用户名或密码错误");
         }
+        sysUser.setOpenId(sysUser.getOpenId());
+        // 更新用户openid
+        sysUserService.updateUser(sysUser);
         // 角色集合
         Set<String> roles = permissionService.getRolePermission(currentUser);
         // 权限集合