微信小程序getUserInfo无法获取用户信息

前言

2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与<button open-type="getUserInfo"/>获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息。

解决办法

1. 使用wx.getUserProfile更换wx.getUserInfo

官方示例

2. 本人因为小程序使用太多wx.getUserInfo,更换起来太麻烦了,所以我选择使用wx.getUserProfile重写wx.getUserInfo,让wx.getUserInfo既能拥有最新API的功能,还能兼容老的功能。

放到app.js最前面

if (wx.getUserProfile) {
  /**
   * isCache  是否用户授权第一次,就把用户信息放到缓存中,以后不用获取最新的,直接拿缓存
   */
  let isCache = true

  Object.defineProperty(wx, 'getUserInfo', {
    configurable: true,
    value: function (callback) {
      if (wx.authorizationInfo) {
        callback.success(wx.authorizationInfo)
        return;
      } else if (isCache) {
        let storageInfo = wx.getStorageSync('authorizationInfo')
        if (storageInfo) {
          wx.authorizationInfo = storageInfo
          callback.success(wx.authorizationInfo)
          return;
        }
      }
      let success = callback.success
      callback.success = function (e) {
        wx.authorizationInfo = e
        if (isCache) {
          wx.setStorageSync('authorizationInfo', e)
        }
        success(e)
      }
      wx.getUserProfile({
        desc: '展示用户信息',
        ...callback
      });
    }
  })
}

开发注意

  • 使用wx.getUserProfile不能在bindgetuserinfo事件下面

    <!-- 错误的方式 -->
    <button open-type="getUserInfo" bindgetuserinfo="getUserInfo">授权</button>
    
     <!-- 正确的方式 -->
    <button bindtap="getUserInfo">授权</button>
    
  • desc字段不能为空

    wx.getUserProfile({
            desc: '展示用户信息',    //不能为空
            success(e){}      
    })


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值