在uniapp中实现获取手机一键登录功能

本文章是基于vue2风格下,如使用vue3,请自行根据代码转化

在生命周期onLoad中使用uni.login获取code,解决不能直接获取手机号

当uni.login成功回调后在success回调调用后端接口获取用户openid和session_key


	onLoad() {
		//一打开就请求code,解决第一次不能获取手机号
		var that = this;
		uni.login({
			provider: 'weixin',
			success: res => {
				
				if (res.errMsg == 'login:ok') {
					uni.request({
						url: xxxxxxxxxx
						method: 'xxx',
						data: {
							xxx:xxx
						},
						success: res => {
							openid = res.openid;
							session= res.session_key;
							t
						},
						fail: (err) => {
							console.log('error',err);
						}
					});
				}
			}
		});
	},

在method:创建getPhoneNumber获取用户手机号

getPhoneNumber(e) {
			
			let pc = new WXBizDataCrypt(app.globalData.appid, this.session);
			let data = pc.decryptData(e.detail.encryptedData, e.detail.iv);
			this.phone = data.phoneNumber;
			app.globalData.phone=data.phoneNumber
		
			if (this.phone) {
				uni.showToast({
					icon: 'none',
					title: '手机号授权成功'
				});
			
				this.wxLogin();
			}
		},

点击一键登录时触发getPhoneNumber

					<button shape="circle" type="primary" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" class="btn">微信一键登录</button>

mehtods中定义wxlogin调用后端登录接口

	wxLogin() {
			let that = this;
		
			uni.request({
				url: xxxx,
				method: 'xxx',
				data: {
					xxxxx:'xxx'
				},
				success: res => {
					// uni.$setStorage('key', res.da, function () {
					//   console.log('数据存储成功')
					// })

					uni.navigateBack()
					
				},
				fail(res) {
					console.log(res)
				}
			});
		},

具体顺序

  1. 在load中调用wx.login获取code,并在成功回调中请求后端接口获取openid和session
  2. 获得openid和session将会在getPhoneNumber中被使用,当点击一键登录时调用getPhoneNumber()
  3. getPhoneNumber()获取成功回调后在回调中调用wxlogin接口请求后端返回用户信息

这样一个简单的微信手机一键登录就成功了

!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值