收藏
回答

getUserInfo 授权后重复获取信息

问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 需求 getUserInfo 客户端 Android 6.6.7 2.0.9

<button open-type="getUserInfo" bindgetuserinfo="getUnionId" withCredentials>授权登录</button>


点击后我拿到了 user 相关的信息,

跳页后我该如何继续重复获得 user 信息


保存起来 或者 用 wx.getUserInfo 报警告,感觉都不太好,

还是说理论上只能把所有 user 相关操作放在 bind 的回调中完成。

最后一次编辑于  2018-06-11  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

10 个回答

  • 永恒君
    永恒君
    2018-06-11

    或者已授权的第二次打开小程序,用 code 和 user 信息取 UnionId,

    总不能让用户又点按钮来让我们走 bind 的回调吧。


    所以像这种需要重复获取 user 信息的 wx.getUserInfo 为啥要报警告呢...

    2018-06-11
    赞同
    回复
  • Daniel.
    Daniel.
    2018-06-13

    你的想法好矛盾,官方文档都写的清清楚楚了。 wx.getUserInfo 若已经授权 是允许拿用户信息的。警告只是为了提示开发者 新版微信 wx.getUserInfo 不能直接用于让新用户进行授权。 

    官方案例都是把用户信息在保存在app.globalData中。咋就纠结这些呢?

    2018-06-13
    赞同
    回复 4
    • 永恒君
      永恒君
      2018-06-13

      唔,这个嘛,和把敏感信息放在 cookie 或 sessionStorage 中一样,感觉并不是比较好的办法。

      而且对于第二次再打开小程序,globalData 可能就清空了,总不能再点按钮授权吧。

      2018-06-13
      赞同
      回复
    • Daniel.
      Daniel.
      2018-06-13回复永恒君

      你只要onLaunch

      判断这个用户是否授权过

      再去决定调用wx.getUserInfo。是可以直接获取到用户信息的。。

      官方只是不允许开发者用wx.getUserInfo来直接弹出授权。 不代表不给你用wx.getUserInfo<授权过>的用户的信息

      2018-06-13
      赞同
      回复
    • 永恒君
      永恒君
      2018-06-13回复Daniel.

      恩恩,没问题,

      用 button 去授权,用 getUserInfo 进行二次获取,

      但还是会报警告,所以因此不太舒服....

      2018-06-13
      赞同
      回复
    • Daniel.
      Daniel.
      2018-06-13回复永恒君

      浅黄色的警告 是提示。。只能说他们他们IDE这样开发比较严谨 让开发者知道官方授权的方式更改

      2018-06-13
      赞同
      回复
  • 桑
    2018-06-13

    wx的目的是不想用wx.authorize(),让小程序可以自动拉起授权弹框,并不是无法获得。

    当用户没有授权或不授权用户信息时,而你仍然用wx.authorize()来调用授权弹框,console里自然会err提示你不要这么做。


    我的解决方法如下:

    1. 用wx.getSetting()去获取已授权的功能

    2. 与项目内需要开启的授权功能列表项做比对

      1. 比对中,用wx.authorize()来执行授权弹框及数据获取的操作

      2. 如果有‘scope.userInfo’,但未授权,则跳过用wx.authorize()授权(严谨的处理方式),并显示<buttonopen-type="getUserInfo">;如果已授权,则继续用wx.authorize()获取数据,并把数据显示在界面上。

    这里不推荐把用户信息以缓存的形式存至storage或其他地方,因为缓存的目的是减少请求提高效率,但缺点是无法及时更新数据。当用户更新了头像或昵称后,你显示的还是旧数据,这将影响体验。


    2018-06-13
    赞同
    回复 1
    • 永恒君
      永恒君
      2018-06-13

      想不到吸引了这么多人进来讨论,哭唧唧...


      授权部分是没问题的,无论是 wx.authorize 或者 wx.getSetting,都要去通过 button 来弹窗获取授权。


      本帖所纠结的部分只在于二次获取 user 信息时

      不想存 storage !也不想重新按 button !也不想被 wx.getUserInfo 报警告...

      看完是不是想打我,嚯哈哈哈,可能是强迫症吧。


      为了提醒大家用 button 弹窗而非用 wx.getUserInfo 主动弹窗,这种报警告的形式真是让开发者不舒服呀。

      2018-06-13
      赞同
      回复
  • 蓝莲花
    蓝莲花
    2018-06-13

    授权过了都可以直接拿到信息,除非删除小程序再打开,只要授权还在,button就可以一直不用显示~

    2018-06-13
    赞同
    回复 1
    • 永恒君
      永恒君
      2018-06-13

      恩恩,后端需要 UnionId,需要 user 信息中的 iv 等信息,

      像这种已授权了不走 bind 了,你会如何去获取呢。

      2018-06-13
      赞同
      回复