收藏
回答

checkSession成功但后端解密失败报code已失效?

我的登录流程是

onload的时候先login一次拿到code存下来


用户getPhoneNumber的时候checkSession

如果成功 直接用存下来的code去后端换取解密的手机号

如果失败 说明sessionKey过期 重新wx.login 拿新的code去后端换取解密的手机号


经测试 发起两次登录,两次的code一样 说明checkSession成功了 但是后端报code失效


在部分用户上稳定复现 其余用户正常

怎么都想不通T_T


回答关注问题邀请回答
收藏

3 个回答

  • 放轻松点 主角
    放轻松点 主角
    2019-12-25

    在wx.login后拿到code发给后端,不存本地(有效期不固定),后端拿到该用户的session_key。


    授权手机号的时候。checksession是否失效。没失效使用iv和encryptedData就可以解密了,如果失效,重新login一次。再使用iv和encryptedData解密

    2019-12-25
    有用 1
    回复 37
    • lavi呀
      lavi呀
      2019-12-25
      我好像听懂了  code和sessionKey的有效期不是完全同步的 我们混为一谈了
      2019-12-25
      回复
    • ,
      2020-01-15
      “如果失效,重新login一次。再使用iv和encryptedData解密“
      此时获取的加密信息是与上次session_key对应的,因此还是会解密失败,除非用户再点一次按钮
      2020-01-15
      回复
    • 放轻松点 主角
      放轻松点 主角
      2020-01-15回复
      就是点的时候判断失没失效啊,失效了用iv和encryptedData解密并且后端存新的session_ley。就不用session_key去解密啊。
      2020-01-15
      回复
    • ,
      2020-01-16回复放轻松点 主角
      首先你点击的时候获取的是对应点击时session_key的iv,然后你再判断失效已经没有什么意义。其次就算失效了,你wx.login用新的session_key去解密iv也会失败。
      2020-01-16
      回复
    • 放轻松点 主角
      放轻松点 主角
      2020-01-16回复
      点击的时候判断的是老的session_key失没失效,失效后我拿当前点击的iv和encryptedData去解密,这个iv和encryptedData并不是跟失效的session_key相对应。目前我们线上环境用这个跑了快2年了。
      2020-01-16
      回复
    查看更多(32)
  • Sweet
    Sweet
    2020-03-23

    其实也可以通过后端来判断是否过期,他们拿不到session_key的时候返回给我们就可以了~我们是这样处理的

    2020-03-23
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    2019-12-25

    code重复消费,有啥想不通的。code作为缓存的key,第二次进来,如果code一样,去取缓存别消费code就行了。

    2019-12-25
    有用
    回复 3
    • lavi呀
      lavi呀
      2019-12-25
      请问这个消费应该怎么理解呢?  目前就是code一样取的缓存的  而且我的场景里暂且没有第二次进来 用户只进来一次 onload也只会执行一次  没太看懂 不好意思
      2019-12-25
      回复
    • Mr.Zhao
      Mr.Zhao
      2019-12-25回复lavi呀
      onLoad会执行一次,不代表wx.login只有一次,而且调二次,也不好复现,但是现象是有的
      2019-12-25
      回复
    • 安国市瀚智网络科技有限公司
      安国市瀚智网络科技有限公司
      2020-03-31回复lavi呀
      code消费指的应该是传给后端,调用jscode2session接口几解析出jscode2session算一次消费吧
      2020-03-31
      回复
登录 后发表内容
问题标签