测试博客
扫码登录现在非常常见,比如支付宝、微信等 PC 端的登录,不止如此,几乎所有的网站都支持扫码登录,本篇文章讲解扫码登录这一功能背后的实现逻辑 什么是二维码 二维码,又称二维条码,常见的二维码为 QR(Quick Response) Code。二维码能承载的信息要比条形码丰富的多,可以存储数字、字符串、图片、文件等。这是
扫码登录现在非常常见,比如支付宝、微信等 PC 端的登录,不止如此,几乎所有的网站都支持扫码登录,本篇文章讲解扫码登录这一功能背后的实现逻辑
什么是二维码
二维码,又称二维条码,常见的二维码为 QR(Quick Response) Code。二维码能承载的信息要比条形码丰富的多,可以存储数字、字符串、图片、文件等。这是近些年来非常的流行的一种编码方式
移动端基于 token 的认证机制
基于 token 的认证机制与常用的账号密码认证方式有较大不同,安全系数比账号密码要高
流程图如下:

二维码扫码登录原理
流程图如下:

扫码登录分为三个阶段:待扫码、已扫描待确认、已确认
待扫码阶段
1~5阶段为待扫码阶段,即生成二维码阶段,是 PC 端跟服务端的交互
首先 PC 端携带设备信息跟服务端发起生成二维码请求,服务端会生成唯一的二维码 ID(可以理解为 UUID),并且将二维码 ID与 PC 设备信息关联起来
PC 端接受到二维码 ID 后,将二维码 ID 以二维码的形式展示,等待移动端扫码。这时,PC 端会启动一个定时器,轮询的查询二维码的最新状态。如果一段时间后二维码没有被扫描,二维码就会过期失效
已扫码待确认阶段
流程图中6~10 阶段
首先移动端扫描二维码,获取二维码 ID,然后将手机端的信息凭证(token)和二维码 ID 作为参数发送给服务端,这时手机端一定是登录的,不存在未登录的情况
服务端接受请求后,会将 token 与二维码 ID 相关联,为什么需要关联呢?一个是为了知道谁扫的这个码,另一个则是为了将 PC 端和登录端的登录状态“联动”。通过这个关联就可以做到:凡是由这个二维码派生出来的 PC 登录状态,都可以被统一撤销。也就是移动端退出的时候,PC 也会跟着退出登录
已确认
流程图中 11~15 阶段
这是扫码登录的最后阶段,移动端携带上一步骤中获得的临时 token,确认登录。服务端校验完成后,会更新二维码的状态,并且给 PC 端生成一个正式 token,后续 PC 端会持有这个凭证来访问服务端
PC 端的定时器,轮询到二维码状态为登录状态,并且获取到了生成的 token,完成登录,后续访问都是基于 token 完成