官方发通知说,wx.getUserInfo在4月30日后,在体验版和测试版中,将不能弹出授权提示框,且该功能会被移除.
我想知道 我用button type为getUserInfo验证组件,之后再用wx.getUserInfo获取用户信息可以吗?
为什么非要用wx.getUserInfo,因为我要在button按钮点击后,wx.login一下,获取code,之后获取sessionKey,之后去解密加密的用户信息获取Unionid,请官方回答一下1。
框架类型 | 问题类型 | API/组件名称 | 终端类型 | 操作系统 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|---|
小程序 | Bug | button | 客户端 | 6.6.6 | 1.9.90 |
大部分 小程序 都是 公众号 或 APP 基础转换过来。对于跨平台开发 我们只希望方便的 获取 Unionid
至于图像昵称 既然有了 open-data 真不重要。 为什么证明“你妈是你妈” 要出一大堆 吓人的 警告框呢? 50%的用户都是被 吓走的。
同求官方回复
所以,全局缓存一个sessionkey用于解密吧,也比较符合腾讯的设计初衷.
这个建议对 单个小程序来说 没问题 , 但对多小程序 公众号与小程序得混合开发 会出问题。 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)
@彬彬 "如果你上次拿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传给他就行了)
@changxue_xu
只有拿到了unionID(当然这是对需要多小程序间关联而言的, 普通的小程序openid就够了), 我才能拿到用户的登录状态, 就是说,后台那边的登录接口设计肯定是要有unionID作为参数来传递的, 所以:
对于开发者而言, 用户的登录与否是通过unionID衔接的.
对于用户而言, 登录与否就是getuserinfo <button>组件的显示与隐藏(简言之就是用户的userinfo授权与否).
可以使用globalData来存储unionID, 如果用户突然关闭授权,那么unionID置空, getuserinfo <button>组件显示,对用户而言未登录,对开发者而言因为unionID置空了,所以也是未登录状态(接口请求拿不到基于空的unionID的相关数据).
我可以这么理解么?
@Jason Z. 对你这种情况关闭授权的时候就得清除登录状态了,退出登录返回到登录页面了。或者这个地方给用户个提示拒绝用户关闭
@"changxue_xu" ''登录过的用户就不在显示登录页了,直接显示首页了。''
1.对于我前台而言, 登没登过的判断是要把unionID作为参数传给后台做网络请求判断得到(我通过<button>组件 拿到userinfo进而解密获取unionID).
2.对于用户而言,登录的入口也就是那个<button>组件的显示与隐藏(拿到userinfo进而解密获取unionID).
3.如果一开始用户点击了<button>,授权了userinfo,那么对于用户而言就是登录成功了,但如果用户突然通过设置关闭了授权,那么虽然对开发者而言用户依旧是登录状态的,但此时应该将<button>组件再次显示(从用户角度来说就是'未登录'了).
我可以这么理解么?
@彬彬 登录过的用户就不在显示登录页了,直接显示首页了。没明白你意思