微信小程序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){}      
    })
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容