微信小程序登录流程理解
小程序官网里面会提到一个小程序的登录逻辑,下面是微信登录的整个过程,官方提供的图片。
官方流程的个人理解:
1.小程序启动。
2.小程序通过wx.login
获取微信的 code,然后将这个 code 发送给开发者服务器(我们自己的开发服务器)
3.开发者服务器接收到code 之后,小程序服务端拿到code去微信服务器换取获取真正需要的微信用户的登录态session_key
和 openid
和 unionid
。
a.准确来说session_key
才是真正的微信登录态信息,但是把 openid
和 unionid
加起来一起理解,也可以笼统地理解为这些都是微信的登录态信息。
4.然后需要开发者服务器自己生成一个自定义的登录态(例如业务 token或者 session)来保存这些微信服务器返回来的微信登录态相关信息(session_key
和 openid
和 unionid
),并且做关联处理,然后返回给小程序客户端。
- 关联处理就是你的自定义登录态和微信的登录态相关联,这样的话就不需要维护多个登录态,只需要维护一个就可以了。
- 关联处理之后需要将这个自定义登录态信息保存起来,可以放到数据库或者本地文件或者 例如 redis 之类的缓存服务里面,以便方便后续使用,而不需要每次都请求微信服务器(微信服务器对这个请求的频率是有限制的)。
- 注意这里不返回微信登录态相关信息,只返回自定义的登录态信息。
- 自定义登录态的信息不仅可以包含 token,也可以包含一些用户权限信息,或者其他信息,因为是自定义的登录态,维护也是很自定义的。
- 一般自定义的登录态的超时时长需要比微信的登录态要长。
5.小程序客户端接收到返回的自定义登录态信息,从而判断用户是否登录成功,登录成功的话,就将自定义登录态信息保存到本地的存储。
- 本地的存储可以是微信小程序提供的
app.globaldata
,也可以是localstoage
,注意,小程序不支持cookie
。 - 保存到本地存储的好处就是,后续使用的这个自定义登录态就不需要再次跟服务器进行交互来获取了,只需要调用本地存储就行了,这里是为了优化性能和避免浪费资源
6.小程序客户端访问业务接口的时候,携带之前保存到本地存储的自定义登录态信息进行对开发者服务器(业务接口服务器)访问
7.开发者服务器的业务接口接收到请求,并且请求里面携带了自定义的登录态,通过校验之后,会返回相关信息
- 校验是将小程序客户端携带过来的自定义登录态和开发者服务器缓存起来的自定义登录态进行对比,会去确认是否和用户的
openid
或者unionid
和session_key
相匹配。 - 如果匹配,就可以马上返回相关信息。
- 如果不匹配,就可以马上返回相关信息,告知小程序客户端无法访问业务接口。
- 如果匹配结果是自定义登录态超时了,就可以马上返回相关信息,告知小程序客户端需要重新运行登录逻辑
- 如果是匹配结果是自定义登录态没有超时,但是微信登录态超时了,那么就会开发者服务器就会再次发起
code2Session
进行微信登录态更新。
上面的图里面的一些术语解释:
code
是微信用户的临时的登录凭证,有效时间五分钟,为了后续生成一个微信登录态 session_key
而使用的;
session_key
是微信用户在小程序里面的登录态信息,这是微信给这个用户颁发的一个登录 session
。
openId
,用户在微信里面的唯一标识,但是需要跟 unionid
进行一起理解;
unioinId
,如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid
来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的unionid
是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid
是相同的。
- 一般来说,
openId
就是微信用户的唯一标识,但是因为微信产品很多,所以会出现多个微信产品使用不同的openId
来标识用户,但是对于我们做业务接入的话,就买办法使用了,所以建议是统一使用unioinid
,因为一般来说,一般的业务都会有公众号,小程序联合使用的,所以unionid
使用频率较高。
3rd_session
是一般是指开发者服务器的登录态,也就是自定义登录态,也就是我们自己公司的业务服务器的登录态(微信官方推荐使用自定义登录态来管理整个微信小程序登录)。
示例代码如下:
wxlogin(){wx.login({success:(data) => {if(data.code){wx.request({url: 'https://test.com/login', //请求接口method: 'POST',data: {//需要传递的参数'captcha': 1234,'mobile': 13148435812,'code': data.code //用户的code},success(res) {//服务器返回来的数据if (res.statusCode != 200) {return wx.showToast({title: '请求失败',})}wx.setStorageSync('key', res.data.data.access_token); //本地存储tokenwx.switchTab({url:'/pages/home/home'})console.log( wx.getStorageSync('key'));return wx.showToast({title: '登录成功',})}})}}})
参考文档:
小程序开发-梳理登录流程-v1.0 - SegmentFault 思否
教程 | 《小程序开发指南》
微信小程序登录流程理解相关推荐
- 微信小程序-微信小程序登录流程(一)
微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打开应用 冷启动: ...
- 微信小程序登录流程+介绍wx.login和auth.code2Session
微信小程序登录流程+介绍wx.login和auth.code2Session 几个核心API和核心字段 wx.login() 调用接口获取登录凭证(code) code2Session 登录凭证校验, ...
- Python Flask微信小程序登录流程及登录api实现代码
1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码:+ wx.login({success: resp => {// 发 ...
- 微信小程序登录流程php,微信小程序登录流程
对于小程序的登录流程微信官方文档也有描述不清的情况,作为一个后端开发研究了小程序关于登录的所有信息对整个登录流程做一个梳理. 首先明确一点,这里指的小程序登录时wx.login(),并不是授权获取用户 ...
- Python-Flask微信小程序登录流程详解及后台实现
文章目录 登录流程图及个人理解 登录接口源码 登录流程图及个人理解 1.前端将由wx.login()方法获取到的用户临时登录凭证code(只能使用一次)传给后台服务器(即登录接口) 2.后台利用微信小 ...
- 微信小程序登录流程,双登录,手机号登录和账户密码登录
一.第一步: 在app.js文件中调用wx.login方法发送res.code和appid给后台,后台返回openid和session_key,把openid和session_key存入storage ...
- android微信登录获取微信账号,微信小程序--登录授权,一键获取用户微信手机号并登录...
一.前言 微信小程序登录流程时序 说明: 小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器 开发者服务器以code换取 用户唯一标识openid 和 会话密钥sess ...
- SpringBoot实现微信小程序登录功能
SpringBoot实现微信小程序登录 微信小程序登录流程 登录流程图 前端代码 后端代码 微信小程序登录流程 微信小程序官方文档:微信小程序官方文档 第一次学习微信小程序的登录,以前也好奇微信小程序 ...
- springBoot+微信小程序登录
微信小程序登录流程 微信小程序登录流程涉及到三个角色:小程序.开发者服务器.微信服务器 三者交互步骤如下: 第一步:小程序通过wx.login()获取code. 第二步:小程序通过wx.request ...
- Java 微信小程序登录
前言 服务端微信小程序登录流程. 1.微信小程序获取token @Value("${wechat.mini.appid}")private String wechatAppId;@ ...
最新文章
- python canvas画移动物体_canvas中绘制的图像怎么让它移动?
- 回填用土好还是砂石料好_卫生间做回填好还是做架空好?这两者有哪些优缺点...
- minio分布式集群示例: 4节点,每节点4块盘
- Ubuntu下安装Nginx服务器并进行优化
- 【目标跟踪】基于matlab光流法运动视频跟踪【含Matlab源码 1357期】
- linux 中文字体 推荐,Linux 下何种字体最好看
- Nodejs安装教程
- Android MTK flash兼容
- 芝麻小客服怎么进后台?
- Flink CheckPoint : Exceeded checkpoint tolerable failure threshold
- 华东理工大学matlab怎么下载,华东理工大学MATLAB.ppt
- 视频教程-最新完整react教程从入门到精通包教包会-ReactJS
- [ctf逆向002]:修改二进制文件中汇编指令的三种方法(OD、IDA、C32asm)
- 用 Python 抓取了 7000 多本电子书
- 1词法分析PaddleNLP / examples / lexical_analysis
- 学员项目开发中的感受
- 原关键帧动画CAKeyframeAnimation
- 2021打卡小程序源码 流量主爆棚
- 学习前端和后端必学之HTTP协议学习
- 【云计算】基于VMware Vsphere云平台的设计与实现
热门文章
- 【IoT】产品设计:硬件成本核算,这篇文章就够了
- IDEA插件(BindED)——查看class文件的十六进制
- 基于qt开发的一款聊天气泡框
- 战胜25名医生:AI真能成为医疗界的“擂主”?
- 写在前面(ShenYu)
- python实现garch模型_【一点资讯】Python玩转金融时间序列之ARCH与GARCH模型
- win10微信卡顿_电脑一分钟小技巧:win10微信电脑端多开方法
- PS线条神器插件Lazy Nezumi Pro(能画出sai般的线条)
- JAVA WEB 复习资料
- 网络云记账小程序源码共享小程序记账应用后端thinkphp5.1账单微信小程序源码加php源码