uni-app实现一键登录思路如下:
1、通过 button 标签获取用户信息(设置button的open-type为getPhoneNumber,并通过@getphonenumber回调获取到信息)
2、调用 uni.login 方法,获取到 code
3、拿着获取到的 code 和用户信息请求后端接口
其实现代码如下:
html代码
<button class="button-div" type="primary" open-type="getPhoneNumber" @getphonenumber="getUserInfo">
微信用户一键登录
<button>
js代码
/**
* 获取到手机号的回调
*/
getUserInfo(e) {
if (e && e.detail.errMsg === 'getPhoneNumber:ok') {
uni.showLoading({
mask: true,
title: '加载中'
});
let self = this;
uni.login({
provider: 'weixin',
success: result => {
if (result && result.code) {
// 此时获取到了用户信息和code,使用这些信息去调用后端接口实现自身逻辑
self.authorizeInfo(self.phoneNumberInfo.detail, result.code);
}
},
fail: result => {
console.log(result)
}
});
}
},
写完以上代码,登录的逻辑就实现了,但是在测试过程中却发现每次登录都要点击两次按钮才能成功,后端反馈是encryptedData解密失败导致的,解决方法:
在调用getUserInfo()之前先调用一次uni.login方法