在项目中,微信授权登录偶尔出现code无效,签名不一致
的返回提示,但是就是偶然性
原因:没有调用wx.login()
就获取用户的encryptedData、signature
等信息
先看下官方的登录流程
很多开发者会把 login
和 getUserInfo
捆绑调用当成登录使用,其实 login
已经可以完成登录,getUserInfo
只是获取额外的用户信息(昵称、头像)。
在项目中,我进行授权登录除了wx.login()
返回的code
,还需要encryptedData、signature
等参数传给后台。获取这些参数有两种方式,一种是点击按钮(open-type='getUserInfo')
获取;另一种是 wx.getUserInfo
获取;对比下两种方式获取到的数据,个人信息返回是相同一致的,encryptedData、signature
等参数不一样。(第一种方式获取是在wx.login
前获取,wx.getUserInfo
是在wx.login
后获取)会发现数据有点不一致。
由于一开始的设计缺陷和实例代码导致的(wx.getUserInfo
必须通过 wx.login
在后台生成 session_key
后才能调用),所以调用 wx.login
获取 code
,然后从微信后端换取到 session_key
,用于解密 getUserInfo
返回的敏感数据,不然会可能导致session_key和服务器存储的session_key不一致,官方提示报错返回
解决方式 :就是 wx.login
获取 code
后,再用wx.getUserInfo
获取encryptedData、signature
等参数(顺序很重要)