小程序信息授权sessionKey失效问题

废话不说,直接上万无一失的办法。

wxml:

<!-- 今日已打卡 -->
  <button 
    class="btn" 
    open-type="getUserInfo" 
    bindgetuserinfo="getUserInfo"
    style="margin-top: 40rpx"
  >
    {{ isset ? (isok ? '今天已打卡' : '进入个人打卡页') : '设置我的目标' }}
  </button>

js:     常见的错误, 

① 用户点击按钮:此时获取到了 加密信息: iv,encryptedData 

② 获取code 

③ 利用code解密,点击按钮获取的 iv,encryptedData ,但是 此时的iv,encryptedData 是上一个code的加密信息。

    如果用新的code,去解密旧的(iv和encryptedData ),微信那边必然是会报错的。

解决方法: 在获取code之后,再用 wx.getUserInfo获取新的 iv和encryptedData 然后再解密,就不会出问题了。
                   注意:一定要抛弃点击按钮拿到的 iv和encryptedData

getUserInfo(e) {
    let _this = this;
    getCodeLogin((res)=>{
        wxgetUserInfo().then(userInfo=>{
          app.globalData.code = res.code;
          let {iv,encryptedData} = userInfo
          // 解密 start
          request({'url': '/index/myauthor', data: { code: res.code, iv, encryptedData }, method: 'POST'})
          .then(result=>{
            if (result.data.No == 0) {
              let { openid } = result.data.Data
              wx.setStorageSync('openid', openid)
              wx.hideLoading({
                success: (res) => {
                  _this.getRank()
                  _this.checkIt().then(()=>{
                    _this.toDaka()
                  })
                  wx.showToast({ title: '授权成功', duration: 1500 })
                },
              })
              resolve(openid)
            }
          })
          // 解密 end
        }).catch(res=>{
          wx.hideLoading();
        });
      });

  },
const wxgetUserInfo = function()
{
  return new Promise((resolve, reject) =>{
    wx.getUserInfo({
      lang: 'zh_CN',
      success(res) {
        resolve(res);
      },
      fail(res){
        reject(res);
      }
    })
  });
}

const getCodeLogin = function(successFn)
{
  wx.login({
    success(res){
      successFn(res);
    }
  })
}

 

posted @ 2021-02-06 00:01  MvloveYouForever  阅读(823)  评论(0编辑  收藏  举报