收藏
回答

checkSession校验失败更新sessionkey之后 iv 等加密参数是否需要重新获取?

第一次wx.login()后获取code 在填写完注册信息时获取用户授权 把encryptedData, iv 缓存起来一起传给后端。然后有时会出现sessionkey过期情况, 故在注册最后阶段使用wx.checkSession校验,校验失败后 。 重新wx.login获取code传到后端再去微信服务器去换取sessionkey。这时候想解密用户敏感信息encryptedData, iv 需不需要重新getuserinfo获取?呢 由于sessinkey过期不可控 问题较难复现故请求各位大佬支援

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

2 个回答

  • 🤔
    🤔
    2021-03-01

    应该是需要重新主动调用wx.getUserInfo重新获取encryptedData的,不得不问一下微信团队,为什么button open-type="getUserInfo"组件不加一个前置回调方法呢?这样开发者就可以在微信组件调用getUserInfo获取加密数据前先wx.checksession并根据结果选择是否调用wx.login了;我们现在都是在组件open-type="getUserInfo"的回调里先wx.checksession然后根据session状态主动调用了wx.login,然后再调用wx.getUserInfo,再调用后台的解密接口,感觉好绕啊,而且如果遇到极端情况-wx.checksession返回是有效,但是调用自己后台的解密接口时刚好session失效了,这就尴尬了呀

    2021-03-01
    有用 1
    回复
  • 污昂ᰔᩚ王࿐
    污昂ᰔᩚ王࿐
    2020-08-11

    不用

    2020-08-11
    有用
    回复 4
    • 牛先森
      牛先森
      2020-08-11
      因为我看官方的node解密示例  这个sessionkey重新获取了改变了 就是密钥改变了  然后我的encryptedData, iv 还是之前的。  这个encryptedData生成的时候也是通过sessionkey加密的吧   那不用重新获取的话 就代表他用第一次的sessionkey加密的东西 能用第二次获取的sessionkey解开。
      2020-08-11
      回复
    • Neo
      Neo
      2020-08-20回复牛先森
      我觉得getuserinfo也是要重新获取的。如果第一次加密的第二次能解开,说明服务端拿你这次wx.login的code换取的sessionkey没有发生变化。我测试过短时间内疯狂wx.login,后端用很多不同的code换sessionkey,都是一样的。
      2020-08-20
      回复
    • 牛先森
      牛先森
      2020-10-22回复Neo
      这个sessionkey变不变是微信这边来决定的 说是经常用的话有效期就会很长  wx.checkSession校验失败的话说明sessionkey就变了。 我自己的号也是怎么试sessionkey都不过期  有的用户就是很短时间就过期了  过期后获取新的sessionkey后  getuserinfo也需要重新获取一下 问题就解决了
      2020-10-22
      回复
    • Neo
      Neo
      2020-12-18回复牛先森
      是这样,checkSession失败就说明服务端之前拿到的sessionkey一定是过期了;但还有种情况:checkSession成功,服务端的sessionkey还是过期了,这种也不知道什么是原因,此时客户端也需要重新wx.login一下
      2020-12-18
      回复
登录 后发表内容
问题标签