评论

wx.getUserProfile 修改方案

wx.getUserProfile 修改方案

最近微信关于用户头像、昵称授权又做了调整。
点击查看原文

解决方案思路如下:

1、在util.js里写一个通用函数,函数的功能是,用户授权成功,将头像昵称,存入服务器,同时,在本地缓存设置标记用户授权成功。

// util.js
function getUserProfile() {
  wx.getUserProfile({
    desc: '用于完善个人资料',
    success: function(res) {
      var userInfo = res.userInfo
      // console.log('userInfo==>', userInfo)
      wx.setStorageSync('storage_info', 1);//本地标记
      //下面将userInfo存入服务器中的用户个人资料
      //...
    },
    fail() {
      console.log("用户拒绝授权")
    }
  })
}

2、在需要用户授权时,做判断,如果本地已经授权,直接执行正常业务逻辑。如果未授权,则提示授权。

 chooseTap: function(e) {
 	//如果未授权,就提示授权,如果授权了,就执行正常的业务逻辑
    if (!wx.getStorageSync('storage_info')) {
      util.getUserProfile()
      return
    }
 	//下面是正常业务逻辑
 	//...
  }

3、在用户进入小程序时,从服务器获取用户信息(如果已授权,就有之前存入的头像,昵称),在页面展示用户信息。
完成以上3步,就全部完成了。

说明:把授权状态存入缓存的好处是:因为wx.getUserProfile每次都会弹授权框,如果每次都让用户授权,体验不好。如果只授权一次,存入服务器,以后都展示的是这个用户信息。在用户微信改名,改头像后,服务器储存的用户信息还是以前的。
所以,把授权状态存入缓存,起码在用户更换手机,或者删除过小程序,又进来时,会弹出授权提示,可以让用户重新授权,将服务器里用户的信息进行一次更新

最后一次编辑于  2021-04-11  
点赞 15
收藏
评论

21 个评论

  • Cigarette or Wine
    Cigarette or Wine
    2021-05-15

    鸡肋了啊 每次都弹窗。 我tama的好奇 微信 一个用户的昵称和头像 性别 基本的信息你藏什么藏

    2021-05-15
    赞同 10
    回复
  • 泡泡
    泡泡
    发表于移动端
    2021-10-21
    现在就只剩下一个昵称和头像了,再弹窗才能获取,简直就是过分了哈!所以我现在连头像和昵称都不要了,都是匿名的,谁稀罕那点破信息
    2021-10-21
    赞同 5
    回复 1
    • 雨帆
      雨帆
      2021-11-12
      你好大佬,请问你这个问题解决了吗
      2021-11-12
      回复
  • 蒲公英
    蒲公英
    2021-05-24

    这个接口返回字段的类型和长度哪里可以查到呢?给个链接谢谢

    2021-05-24
    赞同 1
    回复
  • 小明
    小明
    2021-04-24

    信息是存到数据库了,但用户登录用什么提取用户信息啊?


    2021-04-24
    赞同 1
    回复 2
    • 安达
      安达
      2021-04-25
      头像昵称存到数据库用户这个对象里了,用户登录,知道是哪个用户,用户信息就一起从数据库获取了啊。
      2021-04-25
      回复
    • 我的电脑
      我的电脑
      2021-06-11回复安达
      假如我现在发起一个请求带上token,后台拦截到token失效,然后前台调用登录方法,但是判断到已经授权过了,这个时候也没有有效的token怎么办?
      2021-06-11
      回复
  • 🍟
    🍟
    2021-04-22

    但是你存的是第一次授权所获取到的头像和名称, 如果要拿最新的头像和昵称怎么办?

    2021-04-22
    赞同 1
    回复 1
    • 安达
      安达
      2021-04-25
      所以简单地存了一下缓存,可以在缓存删除(换手机,删除小程序)的情况下,再请求一次。
      如果,用户更换了头像,你立马就要拿到最新的,那你每次都要请求。
      2021-04-25
      回复
  • WANGHANMING
    WANGHANMING
    2021-04-12

    还需要对以前版本的做适配,我们现在上去有些用户不支持getUserProfile直接不能用了

    2021-04-12
    赞同 1
    回复 1
    • 安达
      安达
      2021-04-13
      这个问题不大,如果你的用户非常非常多,才用考虑这个问题。也可以选低一点的版本号。参考版本号:2.10.4/2.11.2/2.12.3/2.14.1/2.15.0
      2021-04-13
      回复
  • 😎不二🦍
    😎不二🦍
    2022-01-20

    其实如果想不那么及时的更新用户头像与昵称,可以在util.js 文件自定义的 getUserProfile 函数与往外面的判断修改一下,if (!wx.getStorageSync('storage_info') 这里在存进去的时候增加一个时间戳,然后取出来在判断一下,如果超过30天,则让在弹出来一次,这样30天能更新一次也可以。

    2022-01-20
    赞同
    回复
  • cx-330
    cx-330
    2022-01-11

    怎么把存入服务器的授权信息再调用显示出来呢

    2022-01-11
    赞同
    回复
  • 石头
    石头
    2021-12-08

    真搞不明白,微信是咋想的,怎么搞出这样个奇葩,既然使用wx.getUserProfile首次做了授权了,那么后面再次进入程序,调用wx.getUserInfo,就应该获取到正常用户信息,现在变成匿名用户信息了,这个getUserInfo,还有啥作用呢?

    2021-12-08
    赞同
    回复
  • 苏寅
    苏寅
    2021-11-07

    在需要用户授权时,使用util.getUserProfile()语句报错:

    VM1069 WAService.js:2 ReferenceError: util is not defined
    

    这该怎么办?

    2021-11-07
    赞同
    回复

正在加载...

登录 后发表内容