zoukankan      html  css  js  c++  java
  • 小程序信息授权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);
        }
      })
    }
  • 相关阅读:
    day59_BOS项目_11
    day58_BOS项目_10
    shell 笔记
    docker + swarm 集群
    HDFS深入浅析
    FTP服务器常规操作
    linux shell 流程控制
    认识黑客常用的入侵方法
    Linux中常用的查看系统信息的命令
    解决Yum安装依赖问题
  • 原文地址:https://www.cnblogs.com/Mvloveyouforever/p/14380323.html
Copyright © 2011-2022 走看看