收藏
回答

getUserInfo能力改变

框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
小程序 Bug button 客户端 6.6.6 1.9.90

官方发通知说,wx.getUserInfo在4月30日后,在体验版和测试版中,将不能弹出授权提示框,且该功能会被移除.

  1. 我想知道 我用button type为getUserInfo验证组件,之后再用wx.getUserInfo获取用户信息可以吗?

  2. 为什么非要用wx.getUserInfo,因为我要在button按钮点击后,wx.login一下,获取code,之后获取sessionKey,之后去解密加密的用户信息获取Unionid,请官方回答一下1。

回答关注问题邀请回答
收藏

68 个回答

  • 老杨
    老杨
    2018-05-03

     大部分 小程序 都是 公众号 或 APP 基础转换过来。对于跨平台开发  我们只希望方便的 获取 Unionid

    至于图像昵称  既然有了 open-data 真不重要。  为什么证明“你妈是你妈”  要出一大堆 吓人的 警告框呢?  50%的用户都是被 吓走的。 

    2018-05-03
    有用
    回复
  • 2018-05-02

    同求官方回复

    2018-05-02
    有用
    回复
  • 陈龙
    陈龙
    2018-05-02

    所以,全局缓存一个sessionkey用于解密吧,也比较符合腾讯的设计初衷.

    2018-05-02
    有用
    回复
  • 老杨
    老杨
    2018-05-01

     


    这个建议对 单个小程序来说 没问题 ,  但对多小程序 公众号与小程序得混合开发 会出问题。  openid 不能识别用户的唯一性。而login  官方并不是每次都给 uniID 。

    2018-05-01
    有用
    回复
  • 彬彬
    彬彬
    2018-04-30

    @Jason Z. 

    并不是这种情况, wx.login的时候, 你的session_key其实在微信的服务器里已经生成了(但是刷新机制不明)


    第一种情况, 显示登录按钮的时候就执行一次wx.login, 这时候假定session_key为aaa, 那么你点按钮的时候所获取的加密数据就需要用aaa来解密, 而如果用户长时间未点击登录按钮,直到aaa过期了, 那么再点击按钮所获取的加密数据就不是用aaa来解密的了,


    第二种情况, 显示登录按钮的时候不执行wx.login, 点击按钮的代码里添加一个wx.login来获取一个code, 因为点击按钮时已经获取到数据了(这个数据其实是在wx.login之前生成的) 而你wx.login之后获取到用户信息加密数据之后执行的, 所以wx.login把微信服务器端的session_key刷新了, 这时候这个session_key不一定能解密出刚刚点击按钮获取的数据.


    而且之前的wx.getUserInfo本身有一个参数是验证登录状态的, 未登录状态不会返回加密数据, 而按钮的方式不知道是如何做的, 如果我从未执行过wx.login, 那么通过按钮能不能获取的到加密数据, 如果能, 那么这个加密数据是通过哪个session_key加密的(因为我没执行过wx.login, 按道理也就是说从来没生成过session_key)

    2018-04-30
    有用
    回复
  • Jason Z.
    Jason Z.
    2018-04-28

    @彬彬 "如果你上次拿wx.login是很久之前, 通过button的getUserInfo拿到信息之后再执行wx.login()导致了session_key刷新, 那么新的code所获取的session_key是不能对数据进行解密的"



    这里我还不是很懂:


    • 官方说code的有效期是5分钟,假定我5分钟之内完成点击<button>获取userinfo操作,在这个时候为什么还要在回调成功后再进行wx.login操作?直接拿上次的code进行解密不行吗?

    • 假定用户在登录页停留很久,原先的code失效了(这个是不是可以用wx.checkSession来判断?),这个时候通过<button>获取userinfo回调成功后再进行wx.login操作,那这个时候的code是最新的,这个新code不就是可以用来解密嘛?(我不是很懂后台的一些知识,解密操作可能也只是开发者后台来操作,对于我前台来说,只需要把新code传给他就行了)


    2018-04-28
    有用
    回复
  • Jason Z.
    Jason Z.
    2018-04-28

    @changxue_xu


    只有拿到了unionID(当然这是对需要多小程序间关联而言的, 普通的小程序openid就够了), 我才能拿到用户的登录状态, 就是说,后台那边的登录接口设计肯定是要有unionID作为参数来传递的, 所以:

    1. 对于开发者而言, 用户的登录与否是通过unionID衔接的.

    2. 对于用户而言, 登录与否就是getuserinfo <button>组件的显示与隐藏(简言之就是用户的userinfo授权与否).

    3. 可以使用globalData来存储unionID, 如果用户突然关闭授权,那么unionID置空, getuserinfo <button>组件显示,对用户而言未登录,对开发者而言因为unionID置空了,所以也是未登录状态(接口请求拿不到基于空的unionID的相关数据).


    我可以这么理解么?

    2018-04-28
    有用
    回复
  • 少爷
    少爷
    2018-04-28

    @Jason Z.  对你这种情况关闭授权的时候就得清除登录状态了,退出登录返回到登录页面了。或者这个地方给用户个提示拒绝用户关闭

    2018-04-28
    有用
    回复
  • Jason Z.
    Jason Z.
    2018-04-28

    @"changxue_xu" ''登录过的用户就不在显示登录页了,直接显示首页了。''


    1.对于我前台而言, 登没登过的判断是要把unionID作为参数传给后台做网络请求判断得到(我通过<button>组件 拿到userinfo进而解密获取unionID).

    2.对于用户而言,登录的入口也就是那个<button>组件的显示与隐藏(拿到userinfo进而解密获取unionID).

    3.如果一开始用户点击了<button>,授权了userinfo,那么对于用户而言就是登录成功了,但如果用户突然通过设置关闭了授权,那么虽然对开发者而言用户依旧是登录状态的,但此时应该将<button>组件再次显示(从用户角度来说就是'未登录'了).


    我可以这么理解么?

    2018-04-28
    有用
    回复
  • 少爷
    少爷
    2018-04-28

    @彬彬 登录过的用户就不在显示登录页了,直接显示首页了。没明白你意思

    2018-04-28
    有用
    回复

正在加载...

登录 后发表内容