评论

微信小程序三种授权登录的方式

灵活使用微信授权登录的功能 ----来着一只年幼的程序猿

经过一段时间对微信小程序的研发后 总结出以下三种授权登录的方式,我给他们命名为‘一次性授权’‘永久授权’‘不授权’

1.一次性授权
常规写法,需要获取用户公开信息(头像,昵称等)时,判断调取授权登录接口,但是此方法如果不经处理的话 用户如果拒绝授权或者删除该微信小程序后 需要重新调取并获取用户公开信息(头像,昵称等),此方法用户体验较差,不建议使用;

2.永久授权
在不必要使用用户公开信息(头像,昵称等)时,不调取授权登录接口,只有在必要的时候再去判断调取授权登录接口并把获取到的用户公开信息存入数据库,这样在每次登录时直接先运行指定函数从数据库索取需要的用户公开信息(头像,昵称等)即可,此方法在删除小程序后不用再次去授权登录(因为在用户第一次授权登录时已经把用户的公开信息存入数据库了以后直接向数据库索取即可),建议使用;

3.不授权
不需要授权登录获取用户公开信息(头像,昵称等),使用wx.login获取用户code并传入后台,后台可以通过用户的code值向微信要一个值(具体需要问后台,我只是个小前端,后台的东西不是很懂,只是知道一些逻辑而且也已经成功实现)然后通过这个用code换取的值就可以识别到指定用户,如果需要的话,前端要显示的头像、昵称等这些信息可以使用自定义可编辑的功能,当然,也可以通过<open-data type=“userAvatarUrl”></open-data><open-data type=“userNickName”></open-data>小程序提供的这个组件显示用户的头像及昵称(不过这个组件只有显示功能),用户如果想直接使用自己的头像昵称,也可以自行授权(比如添加个引导按钮什么之类的),建议使用;

文中使用的微信自带接口、组件及函数:

<open-data type=“userAvatarUrl”></open-data>
<open-data type=“userNickName”></open-data>

wx.login({
success(res){
console.log(res.code)
}
})

微信授权登录

以上三种方式可以灵活运用,也可以把需要的结合到一起,并不冲突;

当然,大佬很多,我也只是个小前端而已,第一次发表技术方面的帖子,希望互相学习,互相指导,如有说的不对的地方还望大佬们及时指出!!! 谢谢

最后一次编辑于  2019-04-18  
点赞 32
收藏
评论

15 个评论

  • Youngwell
    Youngwell
    2019-11-04

    楼主有空可以看看拼多多小程序的授权登录机制,是不是你文中说的第二种永久授权,只有第一次使用拼多多小程序登录时,会弹出授权框,之后进入小程序都会自动登录,用户名和头像都是微信的用户名和头像,即使把小程序删除,重新搜索小程序进入,仍然会自动登录

    2019-11-04
    赞同 3
    回复 3
    • Moonlight
      Moonlight
      2019-11-18
      对  应该是    他应该就属于这第二种,然后个人中心会有一个更新资料的按钮 其实也就是授权按钮 重新获取用户公开信息  从而更新数据库用户信息
      2019-11-18
      1
      回复
    • 晚风
      晚风
      2020-02-04
      那拼多多的那个token是不是就是永久有效的,没有过期时间
      2020-02-04
      回复
    • Make the fox rush
      Make the fox rush
      2020-07-16回复晚风
      肯定不会是永久有效,过期了前端刷新下就好了,重新调业务接口就行了
      2020-07-16
      回复
  • 厂危,速归。
    厂危,速归。
    2019-04-18

    我们方案是通过用户授权后拿到头像昵称,以及通过code解析的出来unionId,且通过getPhoneNumber与手机号绑定,下次进来如果用户未登录,头像昵称授权即可拿到用户token信息等。

    2019-04-18
    赞同 2
    回复 15
    • Moonlight
      Moonlight
      2019-04-19

      其实在用户第一次授权的同时 把用户头像昵称还有获取到的手机号之类的信息直接存放到服务器就好了  下次用户进来的时候 直接传过去code  后台通过这个code去判断是否为新用户(即已授权过的用户)  如果是的话 直接把该用户信息返回即可   如果不是新用户(即已授权过的用户)那么再看看什么时候让用户授权   加个判断 就不用每次都授权了

      2019-04-19
      2
      回复
    • Thinking80s
      Thinking80s
      2019-04-19回复Moonlight

      我们现在就使用这种方式

      2019-04-19
      1
      回复
    • Moonlight
      Moonlight
      2019-04-19回复Thinking80s

      可以  很完美  哈哈哈

      2019-04-19
      回复
    • 厂危,速归。
      厂危,速归。
      2019-04-20回复Moonlight

      都是这样的啊。

      2019-04-20
      1
      回复
    • Yisony
      Yisony
      2019-04-30

      难道用户的头像 昵称不会变?

      2019-04-30
      回复
    查看更多(10)
  • DXM
    DXM
    2019-10-31

    那也就是说,如果前端只调用 wx.login 获取code ,然后把code给后台(之后就是后台的事了),这样前端没有任何授权弹窗,微信审核也是认可的。对吗?


    2019-10-31
    赞同 1
    回复 2
    • Moonlight
      Moonlight
      2019-10-31
      对  如果不需要实时获取用户公开信息的话 这样是可行的  也就是第三种方式
      2019-10-31
      回复
    • Moonlight
      Moonlight
      2019-10-31
      毕竟你没有给用户要权限 所以弹窗也就不存在了
      2019-10-31
      回复
  • 啊楠
    啊楠
    06-08

    大佬,想问一下微信小程序除了使用微信登陆还有没有其他登陆方式,比如FaceBook?

    06-08
    赞同
    回复
  • 爻
    01-25

    通过code能获取到用户信息?

    有点扯吧? 通过code就只能获取到session_key和openid. 同主体下关注过或授权过其他应用的可能会多个unionid

    01-25
    赞同
    回复 1
    • 袁六金!!!
      袁六金!!!
      06-22
      人家可能是openid绑定了用户手机号啥的,一个微信号只能一个用户登录
      06-22
      回复
  • 小龙
    小龙
    2020-12-14

    第二种方法,永久授权存入数据库中,用户卸载小程序重新登录时 如何知道是和数据库保存的用户是同一个人呢

    2020-12-14
    赞同
    回复 2
    • DL小林
      DL小林
      2020-12-23
      对比数据啊,,手机号,微信号···
      2020-12-23
      回复
    • 附属忧伤
      附属忧伤
      03-15回复DL小林
      都删除了重新打开在没有走授权之前哪来的手机号微信号
      03-15
      回复
  • 盖世汤圆
    盖世汤圆
    2020-11-11

    授权之后怎么取消授权

    2020-11-11
    赞同
    回复
  • xy
    xy
    2020-09-07

    用户头像 昵称实时获取 你要怎么处理


    2020-09-07
    赞同
    回复 3
    • Moonlight
      Moonlight
      2020-09-08
      不存数据库的话
      2020-09-08
      回复
    • Moonlight
      Moonlight
      2020-09-08
      存数据库的话  只能手动触发授权按钮 再做之后操作
      2020-09-08
      回复
    • xy
      xy
      2020-09-08回复Moonlight
      ok
      2020-09-08
      回复
  • Redredsecondone.🚶🏻🇨🇳
    Redredsecondone.🚶🏻🇨🇳
    2020-02-24

    如果是永久授权的情况下,当用户头像与昵称有了更换,这时我们需要手动重新获取么?

    还是说 <open-data wx:if="{{isCustomer}}" type="userAvatarUrl"></open-data>

    每次获取的就是客户最新的用户信息,与存入服务器的数据无关;

    因为与后端沟通后,我获取了电话号码只需提供给后台code就行了

    2020-02-24
    赞同
    回复 1
    • Moonlight
      Moonlight
      2020-03-02
      如果需要存数据库的话 那以上提到的永久授权就需要用户手动授权更新头像昵称,如果不需要更新数据库 只是前端显示的话 open-data 标签就够了   不冲突
      2020-03-02
      回复
  • 🐉江南🇨🇳
    🐉江南🇨🇳
    2019-04-30

    大佬总结的真好,get到 了

    2019-04-30
    赞同
    回复 3
    • Moonlight
      Moonlight
      2019-04-30

      不是大佬  哈哈  互相学习

      2019-04-30
      回复
    • DXM
      DXM
      2019-10-31
      好的
      2019-10-31
      回复
    • DXM
      DXM
      2019-10-31
      好的,谢谢
      2019-10-31
      回复

正在加载...

登录 后发表内容