新!uniapp微信小程序微信授权登录

微信小程序更新:授权登录逻辑改变与头像昵称获取新方式,
11月后,微信小程序改变了授权登录逻辑,不再支持一键获取用户信息。登录页面需提供取消授权选项。使用uniapp进行登录时,授权后只能获取token,头像和昵称需用户在个人中心主动选择或输入。头像通过`chooseAvatar`事件获取,昵称在`onBlur`事件中收集,且微信会对内容进行安全检测。

 11月后,微信小程序对于微信授权登录做了逻辑上的更改,之前的一键授权获取用户信息的功能已不再适用。已发布审核完成的小程序不受影响,但要想再发布,只能换成新的登陆逻辑了。

首先,要说明的,个人中心页面,未登陆时,应有登陆按钮,最好不要通过路由守卫跳转至登陆页

登陆页也最好搭配上取消授权,返回上一级

点击授权登陆按钮,通过uniapp中的登陆方法,授权登陆,和后台进行交换,获取token,但不再能获取到头像和昵称,手机号没变化,还是沿用之前的。

登陆完成后,要跳转至个人中心页面,使用uniapp的组件通过点击获取头像和昵称

<button class="box-img" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">				
	<image :src="formData.userInfo.avatar" mode="aspectFill"></image>
</button> 
onChooseAvatar(e) {
				 console.log(e,'---onChooseAvatar');
				  this.formData.userInfo.avatar = e.detail.avatarUrl
			  },
<input v-model="formData.userInfo.name" type="nickname" class="weui-input" placeholder="请输入昵称" @blur="onNickname"/>

 头像获取:需要将 button 组件 open-type 的值设置为 chooseAvatar,当用户选择需要使用的头像之后,可以通过 bindchooseavatar 事件回调获取到头像信息的临时路径。

从基础库2.24.4版本起,若用户上传的图片未通过安全监测,不触发bindchooseavatar 事件。

昵称获取:需要将 input 组件 type 的值设置为 nickname,当用户在此 input 进行输入时,键盘上方会展示微信昵称。

从基础库2.24.4版本起,在onBlur 事件触发时,微信将异步对用户输入的内容进行安全监测,若未通过安全监测,微信将清空用户输入的内容,建议开发者通过 form 中form-type 为submit 的button 组件收集用户输入的内容。

 就是这样了

 

 

Uniapp开发微信小程序实现手机号授权登录是前后端配合完成的,具体方法如下: ### 前端部分 前端需要弹起授权界面,在用户同意授权后,将 `code`、`encryptedData`、`iv` 传给后端。 在 Uniapp 中,可以使用 `uni.login` 获取 `code`,使用 `uni.getProvider` 和 `uni.getUserPhoneNumber` 等相关 API 来完成授权获取 `encryptedData` 和 `iv`。示例代码如下: ```javascript // 获取 code uni.login({ provider: 'weixin', success: function (loginRes) { const code = loginRes.code; // 调用获取手机号授权界面 uni.getUserPhoneNumber({ provider: 'weixin', success: function (res) { const encryptedData = res.encryptedData; const iv = res.iv; // 将 code、encryptedData、iv 发送给后端 uni.request({ url: 'your_backend_url', method: 'POST', data: { code: code, encryptedData: encryptedData, iv: iv }, success: function (response) { // 处理后端返回的手机号等信息 console.log('后端返回的手机号:', response.data.phoneNumber); }, fail: function (err) { console.error('请求后端失败:', err); } }); }, fail: function (err) { console.error('获取手机号授权失败:', err); } }); }, fail: function (err) { console.error('登录失败:', err); } }); ``` ### 后端部分 后端主要有两个关键步骤:一是通过前端传来的 `code`,调用微信的接口获取 `sessionKey` 和 `openid`;二是利用 `sessionKey`、`encryptedData` 和 `iv` 解密出用户的手机号。 #### 获取 `sessionKey` 和 `openid` ```javascript const axios = require('axios'); async function getSessionKeyAndOpenId(code) { const appId = '你的appid'; // 微信小程序AppID const appSecret = '你的appSecret'; // 微信小程序AppSecret const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`; try { const response = await axios.get(url); const data = response.data; if (data.session_key && data.openid) { console.log('获取 sessionKey 和 openid 成功:', data); return { sessionKey: data.session_key, openid: data.openid }; } else { console.error('获取 sessionKey 失败:', data); return null; } } catch (error) { console.error('请求微信接口失败:', error); return null; } } ``` #### 解密手机号 在获取到 `sessionKey` 后,使用它结合 `encryptedData` 和 `iv` 进行解密操作,具体的解密代码会根据使用的后端语言和库有所不同。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值