授权及获取用户信息
授权
小程序授权相关api:
- wx.getSetting
- wx.authorize
- wx.openSetting
- 以及授权对应的api(例如:获取用户信息:getUserInfo)
wx.getSetting(版本:2.6.3及以上)
该api用于获取当前用户对小程序的一些设置,其中包括授权信息
我们一般直接调用,不写参数,在回调函数中通过authSetting属性获取用户授权信息
wx.getSetting({
success (res) {
console.log(res.authSetting)
// res.authSetting = {
// "scope.userInfo": true,
// "scope.userLocation": true
// }
}
})
wx.authorize()
- 我们使用wx.getSetting发现我们要调用的接口需要的权限没有授权,我们可以调用该方法引导用户授权,该方法需要一个参数,即为我们要让用户授予什么权限:scope。
- 调用该方法用户授权后执行success回调函数,我们可以在这里编写我们要调用的函数
- 如果用户拒绝授权,那将会执行fail回调函数
// 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
wx.getSetting({
success(res) {
if (!res.authSetting['scope.record']) {
wx.authorize({
scope: 'scope.record',
success () {
// 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
wx.startRecord()
}
})
}
}
})
wx.openSetting
我们也可以打开授权设置信息界面,让用户去授权,直接调用wx.openSetting方法即可
获取用户信息
UserInfo属性
获取用户信息相关api:
- getUserInfo(2.3.1-2.10.4)
- getUserProfile(2.10.4及以后)
UserInfo
UserInfo属性包含了用户的基本信息,但不包含openid等敏感信息,具体属性见下图
getUserInfo(2.3.1-2.10.4)
- 获取用户信息的api,但是2021年4月28日24时后发布的小程序新版本中,该api只能获取到匿名信息,也就是说用户的信息已经获取不到
- 更改原因大概是:该接口不需要用户操作即可调用,很多开发者在刚打开小程序就询问用户是否授权,不授权就退出小程序,这不符合小程序的理念。
- 具体原因请参照官方文档
- 这里建议您使用getUserProfile获取用户信息
- 如果您还想了解该api,请参考官方文档
getUserProfile(2.10.4及以后)
- 该api是现在常用的获取用户信息的api
- 这个函数必须在点击事件的回调函数中才可以调用,避免了已进入小程序就要授权的问题
- 该api每次调用都会自动弹出授权窗口,所以妥善保存好用户相关信息,避免窗口反复弹出影响用户体验。
- 其中参数desc是告诉用户用户信息的用途,应谨慎填写。
Page({
data: {
userInfo: {},
hasUserInfo: false,
canIUseGetUserProfile: false,
},
onLoad() {
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
},
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
})