评论

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 个评论

  • 半生丶
    半生丶
    2021-10-22

    现在为什么连地区也获取不了了,只有头像,昵称,性别

    2021-10-22
    赞同
    回复 2
    • 半生丶
      半生丶
      2021-10-22
      性别还是未知
      2021-10-22
      回复
    • 雨帆
      雨帆
      2021-11-11
      你好,请问你解决这个问题了吗?我也遇到了
      2021-11-11
      回复
  • Han
    Han
    2021-05-13

    感谢楼主的分享. 这里我也遇到这个问题了. 我分享下我的做法, 供大家交流.

    因为我的情况和楼主不一样, 还要照顾老用户. 所以老用户是已经登录了的, 如果他们进入小程序, 则看到的是匿名昵称了(因为以前设计的是每次 服务器对服务器请求并解密拿到微信更新最新的昵称

    现在服务器解密也是匿名数据了, 也就是说所有的昵称都只能在客户端获取了.并且必须用户点击之后才能获取最新昵称...(这是我理解的...)


    根据上面的变动, 首先就要改服务器昵称修改接口的逻辑, 检测到"微信用户"就不要修改 "昵称,性别,省份, 城市, 头像, 国家, 语言" 就是getUserInfo.userInfo/getUserProfile.userInfo的7个数据.

    其次就是客户端里面的老的getUserInfo()函数内部改动下, 检测缓存里面有没有userInfo(假如用户授权了getUserProfile()那么那到数据之后把里面的userInfo属性缓存到本地LocalStorage里面), 有就发送资格的userInfo给服务器更新昵称等7个数据, 否则就只有发送匿名数据给服务器, 此刻服务器检测到是匿名则不会更新表的那7个字段.

    最后就是注意过滤那7个字段的字符串格式检测和sql注入防范

    不知道是否有更好的设计模式?

    2021-05-13
    赞同
    回复
  • Bubble
    Bubble
    2021-04-21

    666

    2021-04-21
    赞同
    回复
  • Zane
    Zane
    2021-04-21

    getUserProfile需要按钮触发的

    2021-04-21
    赞同
    回复 1
    • 安达
      安达
      2021-04-25
      但是不需要open-type组件了。
      2021-04-25
      回复
  • cspEng
    cspEng
    2021-04-17

    谢谢,帮我大忙了,感谢分享

    2021-04-17
    赞同
    回复
  • 乐乐
    乐乐
    2021-04-17

    用户从右上角主动去掉授权,本地标记还在咋办

    2021-04-17
    赞同
    回复 2
    • 安达
      安达
      发表于小程序端
      2021-04-17

      你已经把用户信息存到你的服务器了呀。

      2021-04-17
      回复
    • ooh
      ooh
      2021-04-23回复安达
      同问,用户点击三个点在设置那里关闭了授权,但这个时候你判断的还是用户已经授权,但其实用户关闭了。
      2021-04-23
      回复
  • let
    let
    2021-04-14

    存在缓存啊!

    2021-04-14
    赞同
    回复
  • 猫工yyf
    猫工yyf
    2021-04-14

    学习了,感谢

    2021-04-14
    赞同
    回复
  • _
    _
    2021-04-14

    thanks

    2021-04-14
    赞同
    回复
  • wang li
    wang li
    2021-04-12

    收藏了

    2021-04-12
    赞同
    回复

正在加载...

登录 后发表内容