关于微信小程序用户授权以及获取非敏感用户信息

授权

小程序授权相关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
    })
  },
})
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狴犴ys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值