收藏
回答

session_key解密失败,该如何实现最完善的登录解密流程?

据官方文档中描述:

wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。

	如果调用wx.login的时候没有刷新session_key,那通过调用wx.getUserProfile接口获取基本信息,此时的密钥是否是对应旧的密钥?由于openid需要从jscode2session接口获取,一旦调用了这个接口,旧的密钥是否就失效了呢?
那此时获取的用户基本信息拿去解密,解密密钥是否就会对不上了?还是新旧密钥都可以对获取到的用户基本信息进行解密呢?
回答关注问题邀请回答
收藏

1 个回答

  • Gavin
    Gavin
    2021-09-06
    wx.login获取到code,然后wx.getUserProfile获取iv等信息,这个时候发送给后端,当后端没用使用code之前,code依旧是有效的,当后端还没有使用又重新调用wx.login,这个时候之前的code将会失效
    
    // 操作枷锁 --> 避免用户频繁操作限制
    let shackles = true
    Page({
      data: { code: '', },
      onLoad() { this.getWxLogin() },
      getWxLogin() {
        wx.login({
          success: res => { this.setData({ code: res.code }) }
        })
      },
      wxGetUserProFile() {
        if(!shackles) return
        shackles = false
        wx.getUserProfile({
          lang: 'zh_CN',
          desc: '用于登陆小程序',
          success: (res) => {
            //授权成功
            requestLogin(res.userInfo)
          },
          fail: (err) => {
            //授权失败
          },
          complete: (fulfil) => {
            shackles = true
          }
        })
      },
      requestLogin(userInfo) {
        console.log('code --->',this.data.code)
        console.log('userInfo --->',userInfo)
        //登陆失败等操作重新调一次getWxLogin
      }
    })
    
    2021-09-06
    有用
    回复 1
    • ㊗ 欢乐逗💤
      ㊗ 欢乐逗💤
      2021-09-07
      感谢您的解答,代码逻辑很受用,可能稍微不太对我的这个症
      2021-09-07
      回复
登录 后发表内容