【尚医通】微信扫码登录和手机号登录冲突问题解决思路

文章描述了一个关于尚医通应用中微信扫码登录与手机号登录冲突的场景,分析了正常流程和特殊情况下的登录逻辑。解决方案包括在回调函数中避免重复注册和在登录方法中改进手机号绑定步骤,确保用户数据的一致性。

【尚医通】微信扫码登录和手机号登录冲突问题解决思路

问题描述

最近做尚医通遇到一个问题,微信扫码登录手机号登录特殊情况 下会发生冲突,导致无法登录的问题。下面就描述一下几种情况。

正常情况:用户第一次一上来就使用微信扫码登录,后端在调用回调函数的时候就完成了用户注册,由于是第一次登录,需要绑定手机号,于是又调用了一次手机号登录的接口,手机号登录成功之后就完成了绑定。之后就可以随便使用扫码登录或手机号登录了。

特殊情况:用户第一次一上来就使用手机号登录,后端会根据手机号去数据库搜索“唯一”的一条数据,如果结果为空则说明是第一次登录,直接注册;如果不为空,说明已经注册过,就直接登录。用户第二次登录时使用的是微信扫码登录,后端在调用回调函数的时候再次完成用户注册,然后又绑定手机号。那么现在数据库就有两条手机号相同的数据了。第三次登陆时若使用手机号登录,那么“唯一”查询就不满足了,就会报错,最后登录不了。


回顾流程

首先回顾一下扫码登录的流程。

在这里插入图片描述

更多详情请见:资源中心 - 微信开放平台 (qq.com)

解决思路

上回调函数代码!

//微信扫描后回调的方法
    @GetMapping("/callback")
    public String callback(@RequestParam("code") String code, @RequestParam("state") String state) {
   
   
        //1.获取临时票据 code
        log.info("code:{}", code);
        //2.拿着code和微信id和密钥,请求微信固定地址,得到两个值
        //2.1使用code和appid以及appscrect换取access_token
        // %s表示一个占位符
        StringBuffer baseAccessTokenUrl = new StringBuffer()
                .append("https://api.weixin.qq.com/sns/oauth2/access_token")
                .append("?appid=%s")
                .append("&secret=%s")
                .append("&code=%s")
                .append("&grant_type=authorization_code");
        String accessTokenUrl = String.format(baseAccessTokenUrl.toString(),
                ConstantWxPropertiesUtil.WX_OPEN_APP_ID,
                ConstantWxPropertiesUtil.WX_OPEN_APP_SECRET,
                code);
        //3.使用httpclient请求这个地址
        try {
   
   
            String accesstokenInfo = HttpClientUtils.get(accessTokenUrl);
            log.info("accesstokenInfo:{}", accesstokenInfo);
            //4.从返回字符串中获取两个值 openid 和access_token
            JSONObject jsonObject = JSON.parseObject(accesstokenInfo);
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值