时间:2019-05-07 来源:小程序工厂
B***:
1、使用wx.login接口获取code,获取到的code不同,是否应该对应不同的session_key?
wx.login可能会刷新session_key。刷新存在一定的间隔。换而言之如果wx.login频率较快的话,间隔期间session_key不会再被刷新。但是我们保证在此期间用code换得的session_key都是有效session_key。
2、如果是的话,根据签名算法,应该返回不同的签名,但存在一定的机率返回相同的签名,请检查是否有问题。
wx.getUserInfo的签名是以当前用户有效的session_key来做签名的。日志看来应该是login频率比较频繁,session_key没有被刷新导致两次签名一样。
上述特性对应用校验签名会有怎样的影响?wx.login对于绝大多数情况应该只需要进行一次。
初***:
@Band 我们是这么实现的,先调wx.login,完成后再调用wx.getUserInfo,然后把code及用户信息等一并传到服务端进行验证。
假设两次请求及对应的sessionKey分别是r1,s1和r2,s2,那么会有一定机率出现使用s2解密不了r2数据、签名也不通过,但使用s1对r2解密及验证签名却都可以。
微信小程序 live-pusher组件&微信小程序开发教程
初***:
是不是因为没有先使用code进行置换,就请求了wx.getUserInfo,所以还是使用旧的sessionKey进行加密?
也就是说sesionKey是在使用code置换后才会更新sessionKey(并且用于加密数据)?所以当r2在调用wx.getUserInfo时,由于还没有使用code置换sessionKey,所以r2中的数据还是使用s1进行加密。
这样的话就是我们实现的问题了,应该分开,处理完wx.login后,再调用wx.getUserInfo
初***:
好像不对,文档上是这么说的
那么调用完wx.login后,不对code进行置换,应该也是会刷新sessionKey的,那么理应在调用wx.getUserInfo时,就用最新的sessionKey进行加密,是这样吧?