介绍
相信有很多同学都遇到过小程序需要授权两次的问题,这个问题的原因是错误的授权流程导致的。
(1)错误的流程:引导用户点击授权按钮(getUserProfile)
=>调起授权(wx.getUserProfile)
=>获取code(wx.login)
=>请求后端、传输数据(code、iv等)
=>后端解密并登陆
。
(2)正确的流程:获取code(wx.show)
=>引导用户点击授权按钮(getUserProfile)
=>调起授权(wx.getUserProfile)
=>请求后端、传输数据(code、iv等)
=>后端解密并登陆
。
代码演示
(1)错误的流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| getUserProfile: function (e) { let _this = this; wx.getUserProfile({ desc: '用于完善会员资料', success: (userResult) => { wx.login({ success (loginResult) { if (loginResult.code) { wx.request({ url: 'https://test.com/onLogin', data: { code: loginResult.code, iv: userResult.iv, encryptedData: userResult.encryptedData, rawData: userResult.rawData }, success(res){ } }) } else { console.log('登录失败!' + res.errMsg) } } }) } }) }
|
(2)正确的流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| onShow:function(){ wx.login({ success: res => { _this.setData({ code: res.code }) } }); }
getUserProfile: function (e) { let _this = this; wx.checkSession({ success(checkRes) { wx.getUserProfile({ lang: 'zh_CN', desc: '用于完善会员资料', success: (userResult) => { wx.request({ url: 'https://test.com/onLogin', data: { code: _this.data.code, iv: userResult.iv, encryptedData: userResult.encryptedData, rawData: userResult.rawData }, success(res){ } }) } }) }, fail() { _this.getCode(); } }) },
|
注意
正确的写法在微信开发者工具
和扫码预览
都无法调起微信授权框,一定要在真机调试
和发布体验版
中测试。