【尚医通】微信扫码登录和手机号登录冲突问题解决思路
问题描述
最近做尚医通遇到一个问题,微信扫码登录和手机号登录在 特殊情况 下会发生冲突,导致无法登录的问题。下面就描述一下几种情况。
正常情况:用户第一次一上来就使用微信扫码登录,后端在调用回调函数的时候就完成了用户注册,由于是第一次登录,需要绑定手机号,于是又调用了一次手机号登录的接口,手机号登录成功之后就完成了绑定。之后就可以随便使用扫码登录或手机号登录了。
特殊情况:用户第一次一上来就使用手机号登录,后端会根据手机号去数据库搜索“唯一”的一条数据,如果结果为空则说明是第一次登录,直接注册;如果不为空,说明已经注册过,就直接登录。用户第二次登录时使用的是微信扫码登录,后端在调用回调函数的时候再次完成用户注册,然后又绑定手机号。那么现在数据库就有两条手机号相同的数据了。第三次登陆时若使用手机号登录,那么“唯一”查询就不满足了,就会报错,最后登录不了。
回顾流程
首先回顾一下扫码登录的流程。

更多详情请见:资源中心 - 微信开放平台 (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);

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

被折叠的 条评论
为什么被折叠?



