微信小程序授权登录流程时序 - 图文详解(微信小程序登陆授权流程)

网友投稿 816 2022-10-05

微信小程序授权登录流程时序 - 图文详解(微信小程序登陆授权流程)

微信小程序授权登录流程时序 - 图文详解(微信小程序登陆授权流程)

最近在做一个微信小程序开发的项目。场景布置:同一微信开放平台下拥有相同主体的APP和微信小程序来完成同样的业务,用户进入app或者微信小程序时必须获取用户的unionid来确认当前的用户身份,完成登录。小程序“获取用户信息”api(getUserInfo)的调用方式和之前相比有了较大更新,优雅的实现用户授权和登录非常重要,以下是我在微信小程序授权登录相关流程在开发时候的实现思路和总结,分享如下。

一、微信小程序登录流程时序

程序员必备接口测试调试工具:立即使用Apipost = Postman + Swagger + Mock + Jmeter Api设计、调试、文档、自动化测试工具 后端、前端、测试,同时在线协作,内容实时同步

说明:

小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key。临时登录凭证code只能使用一次

什么是openid?

在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。对于不同公众号,同一用户的openid不同)。——微信公众平台开发者文档

普通用户的标识,对当前公众号唯一不同的公众号,同一个用户,openid不同

你可以简单的理解为

openid = hash(uid + app_id)-

什么是unionid?

如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。UnionID机制说明

如果开发者在多个移动应用、网站应用和公众帐号之间有统一用户账号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,便可利用UnionID机制来满足上述需求。

一个微信开放平台帐号下可以有多个移动应用,网站应用,公众账号和小程序只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid是唯一的。

用户在开放平台的唯一标识符

你可以简单的理解为:

unionid = hash(uid + 开放平台id)-

总结下微信针对不同的用户在不同的应用下都有唯一的一个openId, 但是要想确定用户是不是同一个用户,就需要靠unionid来区分。一般自己的后台都会有自己的一个用户表,每个用户有不同的userid。也就是说同一个用户在同一个微信开放平台下的相同主体的应用对应着相同的userid,unionid以及不同的openid。所以在用户登录进来的时候,我们只能靠微信返回给我们的unionid去判断是不是同一个用户,在去关联我们的用户表,拿到对应的userid。

二、微信小程序如何获取unionid?

绑定了开发者帐号的小程序,可以通过下面3种途径获取UnionID。

调用接口wx.getUserInfo,从解密数据中获取UnionID。注意本接口需要用户授权,请开发者妥善处理用户拒绝授权后的情况。如果开发者帐号下存在同主体的公众号,并且该用户已经关注了该公众号。开发者可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过wx.login获取到该用户UnionID,无须用户再次授权。

当用户满足条件2和3时,开发者可以直接通过wx.login获取到该用户的unionid, 否则必须调用接口wx.getUserInfo,额外需要注意的事就是妥善处理用户拒绝授权的情况。

三、登录最佳实践

调用 wx.login 获取 code。使用 wx.getSetting 获取用户的授权情况

将获取到的用户数据连同wx.login返回的code一同传给后端

封装ajax()

封装的意义不再关注当前接口是否需要登录,用户是否已授权,所有请求直接调用ajax(),在必要的时候完成一切登录以及授权流程。小程序入口页面增加,业务拓展的时候,你只需要专注于业务实现。

参考资料

小程序•小故事(4)——获取用户信息获取用户基本信息(UnionID机制)UnionID机制说明

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python应用math模块分析保险理- 学习笔记
下一篇:SpringBoot通过AOP与注解实现入参校验详情
相关文章

 发表评论

暂时没有评论,来抢沙发吧~