微信小法度楷模授权登录41003短处
比来碰着这么个坑,偶然要求己方处事器授权登录失踪踪败,百度上一堆复制黏贴的文章其实不靠谱,事实下场在微信论坛上看到解决筹算。
网上有些是说iv内空格导致解密失踪踪败,我犯错的气象下并没有闪现空格,消弭这类气象。
有说是因为要求顺次,可是遵循微信官方文档,仿佛其实不是最新的,起码我授权编制不完全跟文档一样。
我的授权编制
经由过程添加一个按钮而且设置 open-type="getUserInfo"
- <button class='wxBtn'
- open-type="getUserInfo"
- bindgetuserinfo="wechatAction">操作微信账号登录</button>
在按钮点击事务里,会返回一些授权登录需要用到的字段如:iv、encryptedData、signature、rawData 这个时辰再挪用 wx.login() 去获得code,整合以上数据向己方处事器发送要求获得用户独一标识 token。 经由过程以上的编制是可以成功登录,可是偶然会闪现要求己方处事器授权登录失踪踪败,再一次就会成功。 启事在于要求顺次,这里的要求顺次是先要求 wx.getUserInfo(按钮) 再要求 wx.login()。有时辰获得code后iv已失踪踪效,所以失踪踪败。 解决筹算:在要求 wx.login() 后,挪用一次 wx.getUserInfo(销毁接口) ,更新iv等信息。寄望:这里挪用的销毁接口只是不再弹出授权要求窗口,但仍是能够获获得 iv 等信息,授权接口弹窗已将在点击按钮的时辰弹出,而且授权了,所以没短处。 再总结一下,切确的顺次:wx.getUserInfo(按钮) -> wx.login() -> wx.getUserInfo(销毁接口),整合以上操作获获得的比来数据 code、iv、encryptedData、signature、rawData 传给己方处事器,授权登录成功。
以下贴上我的营业代码
- // 点击微信登录
- wechatAction: function(e) {
- // 用户点击授权
- // 先保留获获得的微诺言户信息
- const { nickName, avatarUrl } = JSON.parse(e.detail.rawData)
- this.setData({
- nickName: nickName,
- avatarUrl: avatarUrl
- })
- // 获得微信code
- this.reqWechatCode()
- },
- // 微信登录:获得code
- reqWechatCode: function() {
- // 授权接口登录接口
- let that = this
- // 从微信获得code
- wx.showLoading({
- title: '获得code',
- })
- wx.login({
- success: function (res) {
- if (res.code) {
- wx.getUserInfo({
- success: function (res) {
- // 保留微信登录参数
- const { encryptedData, iv, signature, rawData } = res
- that.setData({
- encryptedData: encryptedData,
- iv: iv,
- signature: signature,
- rawData: rawData
- })
- that.wxLoginReq(res.code)
- }
- })
- } else {
- wx.showToast({
- title: '获得code失踪踪败,请重试',
- icon: 'none'
- })
- }
- wx.hideLoading()
- }
- })
- },
- // 遵循获获得的code 向处事器发送登录要求 获得token
- wxLoginReq: function (code) {
- let that = this
- wx.showLoading({
- title: '获得token中',
- })
- // 拿到code 再加上 encryptedData, iv, rawData, signature 等参数,要求token
- let encryptedData = that.data.encryptedData
- let iv = that.data.iv
- let signature = that.data.signature
- let rawData = that.data.rawData
- var req = require('../../util/Request.js')
- // 要求成功
- let success = function(res) {
- // console.log(res)
- wx.hideLoading()
- // 缓存token
- const { token, user_id } = res.data.data
- let userInfo = {
- token: token,
- user_id: user_id,
- nickName: that.data.nickName,
- avatarUrl: that.data.avatarUrl
- }
- getApp().setUserInfo(userInfo)
- // 同步用户信息
- getApp().loginSuccess(function () {
- wx.navigateBack({})
- })
- }
- // 要求失踪踪败
- let fail = function(res) {
- wx.hideLoading()
- wx.showToast({
- title: '获得token失踪踪败,请重试',
- icon: 'none'
- })
- }
- // 登录要求
- req.reqLogin(code, encryptedData, iv, rawData, signature, success, fail)
- },
第二部门:若何开通一个小商铺