如何实现扫码登陆

背景

最近工作原因需要在项目中加入扫码登陆功能,因为之前没有接触过所以对几个网站主流网站进行了调查。

实现方式

轮询

调查的全部网站都采用轮询的方式来实现二维码登陆,但是具体细节有不同。

以京东为例:

在这里插入图片描述

可以看出,在二维码登陆页面,网页会不断的请求服务器(轮询),以获取是否扫描二维码.

当完成扫码后会直接切换状态,继续轮询是否确认登陆:

在这里插入图片描述

这样,在手机点击确认时会直接轮询会相应并跳转页面。

这里猜测:

  1. 生成二维码,二维码信息入库
  2. 页面js开启轮询,服务端查库返回是否登陆
  3. 手机扫码app发送请求,服务端修改库中对应记录为登陆
  4. js轮询,服务端返回登陆,页面变为登陆状态进行后续操作
  5. 扫码登陆结束

细微差别

淘宝

淘宝的区别是,一个轮询周期发送两天请求,一条用于确认是否扫码,另一条用于确认是否登陆。

【淘宝】

微信网页版

微信网页版的实现逻辑相对更独特。

【微信】

虽然都是轮询,但是微信没次请求间隔很长(25秒),但是在一次请求后服务端不会马上返回相应。
调查后猜测:

微信服务端在收到轮询后不会立即返回响应,而是在服务端进行循环查库,可以理解为在服务端进行轮询。
服务端在25秒内循环参考状态是否改变,如果改变则直接返回,否则25秒结束后返回为扫码。

网页端在接到状态改变后马上获取数据,展现给用户。
否则会继续发送轮询请求。

可以看出,微信的做法用户体验更好:

  1. 扫码后迅速响应,不像其他的需要等待下一次请求才能触发响应。
  2. 请求次数大量减少,减轻浏览器压力,同时节省用户流量。
  3. 缺点是会增加服务器压力。

以上。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Spring Boot是一个非常强大的框架,其它框架可以在其基础之上进行扩展,开发高效方便。 扫码登录是指通过扫描某种二维码实现登录身份验证,其实现方式也比较简单。以微信扫码登录为例,其主要过程如下: 1. 用户在PC上打开登录网页,选择微信扫码登录选项,网页生成二维码; 2. 用户打开微信移动客户端,在“扫一扫”中扫描登录网页生成的二维码; 3. 微信客户端读取网页中的UUID(用于唯一标识每个扫码登录的操作),并将该UUID发送到微信服务器中; 4. 后台服务收到微信服务器发来的UUID,并根据UUID从一个Redis中获取登录信息,生成登录Token; 5. 后台服务将生成的Token返回给网页,网页中通过Cookie将Token存储在用户端; 6. 后续用户的操作中,网页和后台服务以Token进行身份验证。 在以上过程中,由于前、后端的分离操作,需要实现一个通过网页得到UUID的后端服务。这里可以用Spring Boot实现。具体步骤如下: 1. 创建Spring Boot工程,并在pom.xml中添加相关依赖; 2. 实现一个Controller接口,用于处理二维码请求,生成UUID存储在Redis中; 3. 实现一个AuthenticationProvider接口,用于验证生成的Token,并授权用户操作; 4. 将Controller接口映射到一个固定路径,并在网页中创建扫码登录界面; 5. 网页从Controller中获取UUID,并生成二维码(这个可以使用第三方二维码生成工具); 6. 网页通过轮询或WebSocket实现Token的获取和存储。 总的来说,Spring Boot实现扫码登录的过程较为简单,可以基于现有的技术栈进行扩展,极大地提高了开发效率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值