微信小程序对于用户信息获取进行了接口调整。调用wx.getUserInfo(Object object)
不会再由弹窗授权提示。在已授权时,可以直接获取用户信息;否则则直接进入fail
回调函数。
用户的授权状态可以用wx.getSetting()
接口的请求的结果
res.authSetting['scope.userInfo']
来判断。
// 查看是否授权
wx.getSetting({
success(res) {
if (res.authSetting['scope.userInfo']) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称
wx.getUserInfo({
success(res) {
console.log(res.userInfo)
}
})
}
}
})
那么在接口调整后,再进行授权登录则需要通过open-data
来实现。
wxml:
<button
wx:if="{{canIUse}}"
open-type="getUserInfo"
bindgetuserinfo="bindGetUserInfo"
>授权登录
</button>
js:
data: {
canIUse: wx.canIUse('button.open-type.getUserInfo')//当前微信版本是否支持button.open-data操作
},
bindGetUserInfo(e) {
console.log(e.detail.userInfo)
}
具体实现
- 在“弹幕弹幕”项目中,我们在主页判断用户是否已经授权,如果授权,直接调用
wx.getUserInfo()
获取用户信息 - 如果未授权,则在扫码成功后进入授权页,引导用户授权
- 如果已授权,直接转到主页
注:如果用户微信版本不支持open-data,需要提示用户升级。这次接口的调整实际上使得按一次弹窗中的授权按钮即可授权的操作变成了需要按两次,并且需要额外设计授权页面或者在主页先进行一次弹窗引导用户授权。实际上更加繁琐。