ソースを参照

feat(front): 登录绑定

Go 5 年 前
コミット
d52bb40d44

+ 1 - 1
front/project/h5/index.js

@@ -2,7 +2,7 @@ export default {
   mode: () => import('./app'),
   apiToken: 'token',
   loginAuth(route, { user }) {
-    if (route.needLogin && !user.login) return false;
+    if (route.needLogin && !user.login) return true;
     return true;
   },
 };

+ 3 - 3
front/project/www/components/Login/index.js

@@ -46,7 +46,7 @@ export default class Login extends Component {
     if (mobileError || validError) return;
     if (!area || !mobile || !mobileVerifyCode) return;
     if (needEmail && !email) return;
-    User.login(area, mobile, mobileVerifyCode, email)
+    User.login(area, mobile, mobileVerifyCode, email, null, false)
       .then(result => {
         if (result.bindWechat) {
           this.close();
@@ -83,7 +83,7 @@ export default class Login extends Component {
   }
 
   scanLogin(code) {
-    User.loginWechat(code).then(result => {
+    User.loginWechat(code, false).then(result => {
       if (result.bindMobile) {
         this.close();
       } else {
@@ -93,7 +93,7 @@ export default class Login extends Component {
   }
 
   scanBind(code) {
-    User.loginWechat(code)
+    User.loginWechat(code, false)
       .then(() => {
         this.close();
       })

+ 2 - 1
front/project/www/index.js

@@ -1,8 +1,9 @@
 export default {
   mode: () => import('./app'),
   apiToken: 'token',
+  loginPath: '/',
   loginAuth(route, { user }) {
-    if (route.needLogin && !user.login) return true;
+    if (route.needLogin && !user.login) return false;
     return true;
   },
   tabs: [

+ 6 - 6
front/project/www/stores/user.js

@@ -59,9 +59,9 @@ export default class UserStore extends BaseStore {
       });
   }
 
-  infoHandle(result) {
+  infoHandle(result, auto = true) {
     if (result.token) this.setToken(result.token);
-    this.setState({ login: true, needLogin: false, info: result, username: result.username });
+    this.setState({ login: true, needLogin: !auto, info: result, username: result.username });
   }
 
   originInviteCode(inviteCode) {
@@ -91,19 +91,19 @@ export default class UserStore extends BaseStore {
    * @param {*} email 绑定邮箱
    * @param {*} inviteCode 邀请人手机/邀请码
    */
-  login(area, mobile, mobileVerifyCode, email, inviteCode) {
+  login(area, mobile, mobileVerifyCode, email, inviteCode, auto) {
     if (!inviteCode) {
       ({ inviteCode } = this.state);
     }
     return this.apiPost('/auth/login', { area, mobile, mobileVerifyCode, inviteCode, email }).then(result => {
-      this.infoHandle(result);
+      this.infoHandle(result, auto);
       return result;
     });
   }
 
-  loginWechat(code) {
+  loginWechat(code, auto) {
     return this.apiGet('/auth/wechat_pc', { code }).then(result => {
-      this.infoHandle(result);
+      this.infoHandle(result, auto);
       return result;
     });
   }

+ 6 - 7
server/gateway-api/src/main/java/com/qxgmat/controller/api/AuthController.java

@@ -63,7 +63,7 @@ public class AuthController {
 
     @RequestMapping(value = "/token", method = RequestMethod.POST)
     @ApiOperation(value = "验证token", httpMethod = "POST")
-    public Response<MyDto> token(@RequestHeader("token") String token, HttpSession session, HttpServletRequest request) {
+    public Response<MyDto> token(@RequestHeader(value = "token", required = false) String token, HttpSession session, HttpServletRequest request) {
         User user;
         if (token == null || token.isEmpty()){
             user = shiroHelp.getLoginUser();
@@ -105,23 +105,22 @@ public class AuthController {
     @ApiOperation(value = "直接微信二维码登录", httpMethod = "GET")
     public Response<MyDto> directWechatPc(
             @RequestParam(required = false, defaultValue = "") String code,
-            @RequestParam(required = false, defaultValue = "") boolean userInfo,
             HttpSession session, HttpServletRequest request) {
         User user = (User) shiroHelp.getLoginUser();
         if (user!=null){
             // 已登录用户,绑定
-            user = usersService.Oauth(user, code, "wechat_pc", userInfo);
+            user = usersService.Oauth(user, code, "wechat_pc", true);
         }else{
-            shiroHelp.getSession().login(shiroHelp.oauth(code, "wechat_pc"));
+            shiroHelp.getSession().login(shiroHelp.oauth(code, "wechat_pc", true));
             user = shiroHelp.getLoginUser();
         }
         MyDto dto = processUser(user, request);
         return ResponseHelp.success(dto);
     }
 
-    // 公众号登录注册:wechat -> wechat -> bind
-    // pc登录注册:wechat_pc -> bind
-    //           login -> wechat_pc
+    // 公众号登录注册:wechat(false) -> wechat(true) -> bind
+    // pc登录注册:wechat_pc(true) -> bind
+    //           login -> wechat_pc(true)
     @RequestMapping(value = "/wechat", method = RequestMethod.GET)
     @ApiOperation(value = "直接微信公众号登录", httpMethod = "GET")
     public Response<MyDto> directWechat(

+ 19 - 19
server/gateway-api/src/main/java/com/qxgmat/help/SmsHelp.java

@@ -79,24 +79,24 @@ public class SmsHelp {
     }
 
     public boolean verifyCode(String area, String mobile, String code, HttpSession session) {
-        return true;
-//        String dtoString = (String) session.getAttribute(SessionKey.SMS_KEY);
-//        if(dtoString == null){
-//            throw new ParameterException("验证码错误!");
-//        }
-//        JSONObject json = JSONObject.parseObject(dtoString);
-//        session.removeAttribute(SessionKey.SMS_KEY);
-//        SmsSessionDto dto = Transform.convert(json, SmsSessionDto.class);
-//        String originCode = dto.getCode();
-//        String originMobile = dto.getMobile();
-//        String originArea = dto.getArea();
-//        Date expireTime = dto.getExpireTime();
-//        if (originCode.equalsIgnoreCase(code) && originMobile.equalsIgnoreCase(mobile)) {
-//            if (new Date().getTime() > expireTime.getTime()) {
-//                throw new ParameterException("验证码已过期!");
-//            }
-//            return true;
-//        }
-//        return false;
+//        return true;
+        String dtoString = (String) session.getAttribute(SessionKey.SMS_KEY);
+        if(dtoString == null){
+            throw new ParameterException("验证码错误!");
+        }
+        JSONObject json = JSONObject.parseObject(dtoString);
+        session.removeAttribute(SessionKey.SMS_KEY);
+        SmsSessionDto dto = Transform.convert(json, SmsSessionDto.class);
+        String originCode = dto.getCode();
+        String originMobile = dto.getMobile();
+        String originArea = dto.getArea();
+        Date expireTime = dto.getExpireTime();
+        if (originCode.equalsIgnoreCase(code) && originMobile.equalsIgnoreCase(mobile)) {
+            if (new Date().getTime() > expireTime.getTime()) {
+                throw new ParameterException("验证码已过期!");
+            }
+            return true;
+        }
+        return false;
     }
 }

+ 3 - 2
server/gateway-api/src/main/java/com/qxgmat/service/UsersService.java

@@ -149,9 +149,9 @@ public class UsersService extends AbstractService {
         }
         openUser = User.builder()
                 .id(openUser != null ? openUser.getId() : user != null ? user.getId() : null)
-                .avatar(data.getAvatar())
-                .nickname(data.getNickName())
                 .build();
+        if (user ==null || user.getAvatar() == null || user.getAvatar().isEmpty()) openUser.setAvatar(data.getAvatar());
+        if (user == null || user.getNickname() == null|| user.getNickname().isEmpty() )openUser.setNickname(data.getNickName());
         switch(platform){
             case "wechat_pc":
                 openUser.setWechatOpenidPc(data.getOpenId());
@@ -192,6 +192,7 @@ public class UsersService extends AbstractService {
                 // openUser不为空,则用于绑定微信
                 throw new ParameterException("该手机已绑定其他账号,请更换手机号码");
             }
+            user = User.builder().id(user.getId()).build();
             if (user.getRegisterIp() == null || user.getRegisterIp().isEmpty()){
                 user.setRegisterIp(registerIp);
                 user.setRegisterCity(registerInfo != null ? String.join(",",registerInfo) : "");

+ 1 - 0
server/tools/src/main/java/com/nuliji/tools/third/wechat/WechatClient.java

@@ -127,6 +127,7 @@ public class WechatClient {
         data.setAccessToken(result.getString("access_token"));
         data.setExpiresTime(new Date(new Date().getTime() + result.getInteger("expires_in")));
         data.setOpenId(result.getString("openid"));
+        data.setUnionId(result.getString("unionid"));
         if (userInfo){
             JSONObject info = getWebUserInfo(result.getString("access_token"), result.getString("openid"));
             data.setAvatar(info.getString("headimgurl"));