收藏
回答

button的getUserInfo引起的bug

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

使用新的button上getUserInfo的方案后,点击按钮触发授权,先拒绝授权,同时wx.login一次,过三分钟,再触发一次按钮,允许授权,wx.login同时把用户加密信息一起传到后端,后端用code拿到sessionKey去解密,此时会100%解密失败

    通过分析,此问题与getUserInfo生成的与wx.login的顺序有关。

    但,通过按钮的方式,getUserInfo获取加密数据必然是要先于wx.login的

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

4 个回答

  • Band🕹
    Band🕹
    置顶回答2018-05-15

    注意wx.login 会刷新session_key。在userinfo button回调内调用wx.login,开发者获取到session_key是刷新后的session_key,而userinfo是以刷新前session_key做加密的。所以会解密失败。


    建议开发者在获取userinfo等加密数据前,调用wx.login 并对session_key做好维护。


    另外提醒:在用户确认授权后,开发者可以通过 wx.getUserInfo 获取最新的数据。

    2018-05-15
    赞同 2
    回复 1
    • 土豆豆
      土豆豆
      2018-05-16
      所以说,现在按钮完全成了单独一个授权的作用了,我们现在只能是按钮授权结束再login一次,再wx.getUserInfo一次再让后端去解密,这种做法感觉有点多此一举又不得不做的感觉
      2018-05-16
      4
      回复
  • 邓亮
    邓亮
    2018-05-16

    您好,如果我同时需要获取手机号和头像那我这边wx.log要怎么做, 因为换回来的code值没有办法重复使用,不能换出两个session_key, 是不是每次获取的时候都需要wx.log一次..

    2018-05-16
    赞同 2
    回复
  • 土豆豆
    土豆豆
    2018-05-15

    从wx.getUserInfo的文档看的话,加密数据的解密是和wx.login有关联的,



    之前看有地方描述说目前这种关联已经去掉了,但从我们的测试来看,这种关联还是存在的,并且会引起解密失败。


    请问官方去强制废掉wx.getUserInfo的时候考虑过这个东西吗?

    2018-05-15
    赞同
    回复
  • blackcater
    blackcater
    07-19

    我现在的做法是,在 onShow 中维护 session 状态,每次都会用 wx.checkSession 判断,如果过期,就调用 wx.login。

    07-19
    赞同
    回复