微信小程序:wx.login和getPhonenumber解密失败问题
【摘要】
原来的登录处理流程:
通过按钮点击触发,在处理函数内调用wx.login()
发现每次登录,第一次都会解密失败,第二次就成功了。
<button open-type="getPhoneNumb...
原来的登录处理流程:
通过按钮点击触发,在处理函数内调用wx.login()
发现每次登录,第一次都会解密失败,第二次就成功了。
<button open-type="getPhoneNumber"
bindgetphonenumber="getPhonenumber">登录</button>
async getPhonenumber(e){
wx.login()
}
此时,是先点击的获取用户信息,再进行登录。
逻辑是不对的,因为获取手机号之后才进行的登录
第一次获取手机号,微信使用的是当前session_key
对手机号信息进行加密,而我们的session_key还是空的
,或者用户之前登录过,那么session_key就是上一次登录的状态
。解密失败。
第二次获取手机号,我们通过上次登录,获取了最新的session_key
,服务端也存了同样的一份session_key
, 微信加密和我们服务器解密使用的是同一份数据。解密成功。
解决办法
知道了登录的问题所在,当用户授权之前,应该使得服务端session_key
和 当前session_key
保持一致。
// 该方法应该在进入页面的时候,或者getPhonenumber之前调用
login(){
// 如果有session_id,可以检查一下是否过期
wx.checkSession()
// 过期就登录
wx.login()
// 将session状态同步至服务器
// 登录成功后本地可以保存一份session_id
}
async getPhonenumber(e){
// 获取手机号逻辑
}
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/122616464
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)