收藏
回答

wx.getUserProfile不能和wx.login一起使用?

mac 模拟器1.05.2102010 基础库2.16.0

调用wx.login获取code后,再调用wx.getUserProfile,可能会失败,触发fail函数,error msg: ''getUserProfile:fail can only be invoked by user TAP gesture"。

如果不能同时使用,那如何校验用户信息的准确性或者解密encryptedData呢?

最后一次编辑于  04-08
回答关注问题邀请回答
收藏

9 个回答

  • 冫.bindy
    冫.bindy
    21小时前

    用了promise.all(),平级调用

    21小时前
    有用 2
    回复 1
    • starry
      starry
      20小时前
      是的,一起触发就可以的
      20小时前
      回复
  • |G.XIAO|
    |G.XIAO|
    04-08

    wx.getUserProfile 用户才能触发,wx.login 不需要用户触发

    如果让我们重新设计用户登陆模块,会怎么设计呢?

    如果是我的话,我会这样设计:

    1.用 wx.login 获取 openId(unionId),这个过程是静默的,不需要用户参与,这个能满足市场大多数应用的需求

    2.对于社交分享类的应用,可以进入首页后,用户点击首页可点击区域时,申请用户头像信息(申请成功后保存到后端)

    3.在我的页面在增加个用户头像更新能力即可

    4.对于分享无法获取实时头像的问题,可以在用户点击分享时,先申请获取用户最新头像,然后在进行分享

    这段时间社区很多人吐槽,其实我们还是要看这些改到背后的事情1.对用户隐私要求越来越严,权限细分越来越细,我觉得是好事

    2.我们要抛出历史包袱去想用户授权,别被历史包袱所束缚

    3.getUserInfo 的能力可以通过 wx.login 和 wx.getUserProfile 来实现,都是只需要用户操作一次,唯一的弊端是 wx.getUserProfile  每次都需要用户触发才能拿到最新头像

    4.我觉得没有几个应用对头像的更新频次比微信本身要高,所以也不用在纠结了头像是否为最新的了,只需要提供用户具有更新头像的能力即可

    04-08
    有用 1
    回复 4
    • starry
      starry
      04-08
      getUserProfile拿到的加密数据,需要把wx.login拿到的code传给后端,后端才能解密。为什么不直接用明文数据,因为不安全
      04-08
      回复
    • 若水
      若水
      1天前回复starry
      你好,我这边session失效时,原先是通过调用重新获取加密数据,然后传到后台登录的,现在getUserProfile必须通过点击才能获取信息,所以session失效时,无法重新登录,请问这个你是怎么解决的
      1天前
      回复
    • starry
      starry
      1天前回复若水
      利用事件冒泡,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口,把加密信息和code传给后端
      1天前
      回复
    • 噜啦噜啦嘞
      噜啦噜啦嘞
      23小时前
      getUserProfile在2.10.4-2.15.0之间的版本还在灰度,获取不到加密信息,getUserInfo返回的也是匿名的信息,这个怎么解决呢?
      23小时前
      1
      回复
  • 奇诺
    奇诺
    1天前

    我也是在调整登录方案时,发现了这个问题

    有发现什么好的方案吗

    1天前
    有用
    回复 1
    • starry
      starry
      1天前
      利用事件冒泡,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口,把加密信息和code传给后端
      1天前
      回复
  • 小丁做事小叮当
    小丁做事小叮当
    星期二 15:48

    我是点击授权按钮的时候 先wx.login 再wx.getUserProfile 这俩先后顺序 平级

    星期二 15:48
    有用
    回复 1
    • starry
      starry
      星期二 18:28
      是的,我现在就是这么做的
      星期二 18:28
      回复
  • Casual
    Casual
    04-09

    碰到同样问题,先wx.getUserProfile在成功回调里用wx.login,请求后台接口会报错。希望官方给出合适的解决方案。

    04-09
    有用
    回复 1
    • Casual
      Casual
      04-09
      已解决,需要后端改调用方式,因为我们传过去,他们解析拿不到unionid和openid要后端自己在回调里取unionid和openid
      04-09
      回复
  • .    ⃢👁-👁⃢     .
    . ⃢👁-👁⃢ .
    04-09

    遇到同样的问题,若楼主有解决方法请告知

    04-09
    有用
    回复 1
    • starry
      starry
      04-09
      目前是利用事件冒泡的原理,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口
      04-09
      回复
  • 跨商通
    跨商通
    04-08

    wx.login和wx.getUserProfile现在没关系了。各玩各的吧。

    04-08
    有用
    回复 5
    • starry
      starry
      04-08
      加密信息需要解密啊,解密需要把code给后端啊
      04-08
      回复
    • 跨商通
      跨商通
      04-08回复starry
      以下仅供参考:
      https://developers.weixin.qq.com/community/develop/article/doc/00062eab0508684539cba249f59413
      04-08
      回复
    • starry
      starry
      04-08回复跨商通
      感谢回复,场景不一样,解密encryptedData或者校验用户信息都需要session_key,这就必须调用wx.login
      04-08
      1
      回复
    • HAHA
      HAHA
      04-10回复starry
      请问你解决了吗
      04-10
      回复
    • starry
      starry
      1天前回复HAHA
      利用事件冒泡,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口,把加密信息和code传给后端
      1天前
      回复
  • undefined
    undefined
    04-08

    是的,不能在wx.login 的callback 里用,我是页面onload 时候存了code(),更新状态管理或者globaldata 都行。

    然后getUserProfile 取了就行


    04-08
    有用
    回复 2
    • starry
      starry
      04-08
      这样code会过期啊
      04-08
      回复
    • 让优秀成为一种习惯
      让优秀成为一种习惯
      12小时前回复starry
      请问一下,session_key 会不会生成不一样的值,后台要不要保存它
      12小时前
      回复
  • 舒克
    舒克
    04-08

    我是先调用的wx.getUserProfile

    04-08
    有用
    回复 5
    • starry
      starry
      04-08
      wx.login不能在回调里使用,会刷新
      04-08
      回复
    • 、时倾°
      、时倾°
      星期二 20:03回复starry
      我先把wx.login封装起来,我如果先调用wx.getUserProfile成功后然后调用wx.login分方法是不是可以使用
      星期二 20:03
      回复
    • starry
      starry
      星期二 22:31回复、时倾°
      应该是不可以的,wx.login不能在回调里使用
      星期二 22:31
      回复
    • 赛迩云@移动电商解决方案提供商
      赛迩云@移动电商解决方案提供商
      2天前回复starry
      我想知道你最后怎么解决的?
      2天前
      回复
    • starry
      starry
      1天前回复赛迩云@移动电商解决方案提供商
      利用事件冒泡,父子元素的点击事件分别触发login和getUserProfile,把结果分别放到data上,再watch这两个值,都不为空的情况下,请求接口,把加密信息和code传给后端
      1天前
      回复
登录 后发表内容
问题标签