微信小程序登录的一个bug记录

今天复习小程序相关业务逻辑 补记开发过程中遇到的一些问题

之前公司测试小程序登录时遇到过两个问题:
微信小程序登录的一个bug记录

1、一个用户在 其他小程序登录–手机号授权 时绑定过非当前使用手机号,于是在当下绑定手机号时弹窗里给了历史记录的两个手机号 当用户选了当前使用的手机号时 报错。

原因:
用户当前使用的手机号在公司客户端app上手机号登录使用过 并绑定了微信。另一个手机号没有。 则该用户在数据库中的那行数据已经存储了unionid字段。然后小程序登陆的时候 登着常用微信但手机号选择了另一个 这时在数据库检索不到另一个手机号会把当前用户当成新用户insert数据 但是数据库建表时规定字段unionid不能重复 于是insert失败

解决方案:
服务端检测到unionid重复时 明白这是一个已经完成从“微信用户–>平台用户”身份映射的用户在使用一个非当前微信关联的手机号进行注册 则返回错误提示至前端 提示用户选择当前微信绑定的手机号即可。

2、另一个用户有两个手机号 分别绑定两个微信 登着第一个微信进行小程序登录的时候选择了第二个手机号 却登陆成功 只是展示的基本信息属于第一个微信

原因:
用户第一个手机号在公司客户端app上登录用过 但是没有绑定过微信 没有存储unionid 没有完成微信身份–>平台身份的映射。后来进行小程序登录 数据库检索到了这个手机号 判断为老用户 没有做unionid的存储 和 微信用户–>平台用户身份的关联 只是直接反馈“登录成功”
然后退出重新进行登录测试时 登着第一个微信但是绑定了第二个手机号 这时候检索数据库发现没有这个手机号 当成新用户进行微信身份–>平台用户身份的关联 就把属于第一个手机号的unionid等身份信息绑在了第二个手机号上 产生了错乱

解决方案:
服务端在数据库检索到手机号认为是老用户时 需要遍历该用户的数据字段 发现没有微信身份相关信息时 拿当前微信信息进行绑定 这样形成一个完整的用户数据。
而后用户再使用非当前微信手机号登录时 就会“检索不到手机号判断为新用户插入信息被拒绝 进入情景一”。