getUserInfo能力改变
发布于 6 年前 作者 mtang 1988 次浏览 来自 问答

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

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

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

10 回复

 

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

@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)

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

code 是login返回的,不是getUserInfo返回的呀

同求官方回复

wx.getUserInfo 返回的信息跟button返回的信息一样的。

你这个就相当于调用两次 getUserInfo

没看懂你需求

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

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

@彬彬 "如果你上次拿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传给他就行了)

  1. 用户点击 button->调用login 同时返回了私密信息



用bindgetuserinfo 呀

回到顶部