微信小程序:wx.login和getPhonenumber解密失败问题

举报
彭世瑜 发表于 2022/01/22 23:14:50 2022/01/22
【摘要】 原来的登录处理流程: 通过按钮点击触发,在处理函数内调用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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。