【微信小程序】小程序授权登录偶发性的解密失败原因及解决方案

概要

  • 在小程序开发中,获取用户信息,获取手机号基本是必须用到的功能
  • 但是在有些时候会遇到小程序解密失败的问题,这多数是因为前端这边登录流程出的问题
  • 会出错的流程:前端多数是把open-data的获取加密信息按钮做成登录按钮,然后点击的时候用wx.login获取code,成功后将加密信息和code传到后端直接调用解密手机号的接口,这样session_key可能没来得及刷新,从而导致解密失败,但是第二次解密一定会成功的现象

原因分析

  • 出错的原因:在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。
  • 解决方案:建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

解决案例

所有解决办法是提前调wx.login,在获取手机号的回调方法中取检验登录状态,代码如下:

onLoad: function (options) {
  wx.login({
    success: res => {
      that.setData({
        code: res.code
      })
    }
  })//先登录提前保存code
},
getPhoneNumber(e) {//触发获取手机号加密信息
  let that = this,
  encryptedData = e.detail.encryptedData,
  iv = e.detail.iv;
  wx.checkSession({
    success() {
      //session_key 未过期,并且在本生命周期一直有效(这里面可以不写代码)
    },
    fail() {
      // session_key 已经失效,需要重新执行登录流程并更新code
      wx.login({
        success: res => {
          code = res.code
          that.setData({
            code: code
          })
        }
      })
    },
    complete() {
      //将code,encryptedData,iv传给后台进行解密
    }
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上网的虫不叫网虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值