使用uni 微信登录第一次失败,第二次就成功,附带解决办法,绝对好使

需求:通过微信绑定手机号弹窗,获取用户信息,带到后台
原因:sessionkey 过期了
为啥过期:与微信官方交互了两次,sessionkey 更新导致 sessionkey 不一致
最终解决思路:

具体问题:

使用框架使用的是 uni,写的是微信小程序,ul框架用的:thorui
产品要点击微信一键登录,通过获取手机号在获取用户信息存放到数据库中,刚开始我也实现了,但是每次登录的时候第一次都会失败,第二次点击就可以了,一开始我还以为是后台的问题,想要疯狂甩锅,代码实现是:在button按钮绑定事件,拿到用户信息,进行un,login,然后根据code获取sessionkey,调接口传encryptedData和sessionkey到后台进行对encryptedData解密,返回用户信息

具体实现:
对 thorul的button 进行二次封装,增加了获取手机号功能,返回的是一些encryptedData,cloudID 用户加密之后的信息,要放到后台,通过sessionkey 进行解密返回

先说一下第二套方案吧,但是他是不行的,但是我就要说:

发现了是两次sessionkey不一样了,于是在封装的button进行了处理,在button中进行的uni.login

binduserphone(data){
		let userData=data
					uni.login({
					provider: 'weixin',
					success: function(rep) {
						userData.userDataLoginCode=rep
						//rep中有code通过code获取sessionkey,此时与微信官方进行两次交互,但是code是最后的我以为可以解开用户信息
						_this.$emit('getphonenumber', userData);
					}
				});
	}

在这里其实是不行的
第一次与微信官方获取用户解密的信息生成了一个sessionkey
第二次通过un.login登录获取sessionkey
但是此时你的sessionkey钥匙打不开你第一次的锁,所以授权失败,当你第二次的登录的时候,你的sessionkey已经存在了,所以授权成功,**于是我有了思路,想着能不能在第一次获取加密信息的时候拿到sessionkey存起来,看了下没有相对数据,百度无果,

浏览了相关公司的小程序发现的确可以,顺丰的,享道的摩拜的都可以,但是我发现他们都有一个共同的问题就是当点击授权的时候回延迟1秒左右,于是问题解决了

解决方案:

先进行uni.login获取sessionkey在获取encryptedData传给后台,问题就解决了,
我在那个button 按钮上面加了一个tab事件,进行获取sessionkey在进行encryptedData解密,要在封装的button中加一个settimeout就好了

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值