问题:
在获取微信用户信息时,会出现一个授权弹窗,需要用户点击“允许”才能正常获取。若用户点击“拒绝”,不仅本次登录会失败,而且一定时间内后续登录也会失败,因为在短期内再次调用微信用户信息接口时,微信不会再向用户展示授权弹窗,而是直接按失败返回。这样导致用户只要拒绝过一次,即使想授权也难以再次操作。
解决方法:
- 在wxml页面放入 button 标签
<button type="primary" open-type="getUserInfo" bindgetuserinfo="onGotUserInfo">设置用户授权</button>
<button type="primary" bind:tap="onOpenSetting">设置</button> (也可以通过button open-type="openSetting"调用)
- 添加相应的事件
/**
* 设置用户信息授权
*/
onGotUserInfo (e) {
if (e.detail.userInfo) { // 用户授权成功
// 获取用户信息成功,进行后续流程
} else { // 当用户拒绝授权时进入
wx.showModal({
title: '提示',
content: '尚未进行授权,如不授权将无法使用部分功能',
showCancel: false, // 只显示成功按钮
success () {
wx.openSetting({
success (res) {
if (res.authSetting['scope.userInfo']) { // true=>成功授权
wx.getUserInfo({
withCredentials: 'true',
success: (result)=>{
// 获取用户信息成功,进行后续流程
},
fail: ()=>{}
})
}
},
fail (){}
})
}
})
}
}
/**
*授权设置
*/
onOpenSetting () {
wx.openSetting({
success (res) { // 只有通过真机调试,在设置界面点击返回按钮后才会触发(小程序模拟器暂不支持)
if (res.authSetting['scope.userInfo']) { // true 授权成功
// 获取用户信息成功,进行后续流程
} else {
console.log('授权失败')
}
},
fail () {
console.log('授权失败')
}
})
}
网友评论