实现扫码登录

扫码登录是如何实现的?

二维码信息里主要包括唯一的二维码ID,过期的时间,还有扫描状态:未扫描、已扫描、已失效。

扫码登录流程

用户打开网站登录页面的时候,浏览器会向二维码服务器发送一个获取登录二维码的请求。二维码服务器收到请求后,会随机的生成一个uuid,通常是唯一的。将这个uuid作为key存储到Redis服务器中,同时会设置一个过期时间,过期之后用户就要重新网页刷新来获取。之后会将这个uuid和本公司的验证字符串和在一起通过二维码生成接口生成图片,将二维码图片信息和uuid返回给浏览器,浏览器拿到uuid和图片之后,每隔一定时间就向服务器发送以恶判断登录是否成功的请求,请求,请求中会携带uuid作为当前页面的标识符。

用户拿起手机扫描二维码之后,就会得到二维码中包含的验证信息和uuid,由于手机端已经进行过登录验证,在访问手机端服务器的时候参数中都会携带一个用户信息token,这个token实在第一次手机登录过程中产生并且长期有效的。手机端服务器通过这个token就可以解析出用户的类似于userId等信息。然后手机端服务器会将解析出来的数据作为参数向二维码服务器发送登录请求,二维码服务器收到请求后会对参数进行校验,确定是否为用户登录请求接口。如果是就返回给手机一个确认信息。手机端收到消息之后,登录确认框会显示给用户,用户进行登录确认之后手机再次发送请求,redis服务器拿到信息之后,会将刚才uuid的key的value设置未userId。

这样浏览器再次发送请求的时候就可以在redis服务器重拿到用户的id,并调用登录方法生成一个浏览器token。浏览器再发送请求,就会将用户信息的token返回给浏览器。

流程图

扫码登录流程图

Tip 提示:

这里存储用户id而不是直接存储用户信息是因为,手机端的用户信息,不一定是和浏览器端的用户信息完全一致。

传 token 是为了安全,token是被加密的,直接传 userId可能有被窃取的风险。

注意点:

  1. 认证成功后,会对当前用户数据进行加密,生成一个加密字符串token,返还给客户端(服务器端并不进行保存)
  2. 浏览器会将接收到的token值存储在Local Storage中(通过js代码写入Local Storage,通过js获取,并不会像cookie一样自动携带)
  3. 再次访问时服务器端对token值的处理:服务器对浏览器传来的token值进行解密,解密完成后进行用户数据的查询,如果查询成功,则通过认证,实现状态保持,所以,即使有了多台服务器,服务器也只是做了token的解密和用户数据的查询,它不需要在服务端去保留用户的认证信息或者会话信息,这就意味着基于token认证机制的引用不需要去考虑用户在哪一台服务器登陆了,这就为应用的扩展提供了便利,解决了session扩展性的弊端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/358994.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

让Elasticsearch飞起来!百亿级实时查询优化实战

让Elasticsearch飞起来!百亿级实时查询优化实战 - 简书 最近的一个项目是风控过程数据实时统计分析和聚合的一个 OLAP 分析监控平台,日流量峰值在 10 到 12 亿上下,每年数据约 4000 亿条,占用空间大概 200T。 面对这样一个数据量…

【Java】内存溢出和内存泄露的区别

目录 概念 内存溢出分类 内存泄漏分类 发生场景以及解决方法 内存溢出 内存泄漏 解决方法 这道题是面试常考的,一定要区分好区别,我之前就是直接认为内存溢出就是内存泄漏了 概念 内存溢出:是指程序在申请内存时,没有足够…

国考省考行测:分析推理,形式逻辑,集合推理,真假推理

国考省考行测:分析推理,形式逻辑 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和…

基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的视频网站系统的设计与实现(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

git diff查看比对两次不同时间点提交的异同

git diff查看比对两次不同时间点提交的异同 用 git diff命令: git diff commit-id-1 commit-id-2 不同commit-id在不同的时间点提交产生,因为也可以认为git diff是比对两个不同时间点的代码异同。 git diff比较不同commit版本的代码文件异同_git diff c…

顺序表的奥秘:高效数据存储与检索

🍿顺序表 🧀1、顺序表的实现🍥1.1 创建顺序表类🍥1.2 插入操作🍥1.3 查找操作🍥1.4 删除操作🍥1.5 清空操作 🧀2、ArrayList的说明🧀3、ArrayList使用🍥3.1 A…

Focaler-IoU:更聚焦的IoU损失

摘要 边界框回归在目标检测领域中起着至关重要的作用,而目标检测的定位精度在很大程度上取决于边界框回归的损失函数。现有的研究通过利用边界框之间的几何关系来提高回归性能,而忽略了难易样本分布对边界框回归的影响。本文分析了难易样本分布对回归结…

在linux上进行编译调试

1.相关疑问 1. 为什么在代码里使用了一个未定义过的函数(如add()),在编译阶段不会报错,在链接阶段会报错呢? 答:先说几个代码编译的结论: 单个\.c源文件文件被编译成机器码文件时&#xff0c…

DC-Windows备份(23国赛真题)

2023全国职业院校技能大赛网络系统管理赛项–模块B:服务部署(WindowServer2022) 文章目录 题目配置步骤在DC1上备份系统状态到D:\共享文件夹所有用户具有读/写权限验证查看DC1备份成功的截图在InsideCli上查看备份文件(查看文件夹安全属性)题目 在DC1上备份系统状态到D:\,…

Linux实验记录:使用firewalld

前言: 本文是一篇关于Linux系统初学者的实验记录。 参考书籍:《Linux就该这么学》 实验环境: VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注: RHEL8系统中集成了多款防火墙管理工具&#xf…

Qt之QLabel介绍

概述 QLabel是QT界面中的标签类,它从QFrame下继承,QLabel 类代表标签,它是一个用于显示文本或图像的窗口部件。我们主要介绍一下QLabel的一些简单的使用。 设置颜色背景色和字体的颜色大小 字体及颜色 设置文字使用的是setText函数。 QStri…

一文彻底搞懂redis数据结构及应用

文章目录 1. Redis介绍2.五种基本类型2.1 String字符串2.2 List列表2.3 Set集合2.4 Zset有序集合2.5 Hash散列 3. 三种基本类型3.1 Bitmap (位存储)3.2 HyperLogLogs(基数统计)3.3 geospatial (地理位置) 4. Stream详解4.1 Stream…

小土堆pytorch学习笔记002

目录 1、TensorBoard的使用 (1)显示坐标: (2)显示图片: 2、Transform的使用 3、常见的Transforms (1)#ToTensor() (2)# Normalize() (3&…

Java基础—面向对象—19static关键字详解、抽象类、接口、N种内部类

1、static关键字 匿名代码块、静态代码块、构造方法 静态代码块是在类加载的时候执行,仅执行一次 匿名代码块在调用构造函数之前 验证如下图: 2、静态导入包(可能很多人听都没听过) 3、Math是用final关键字的,fina…

Mybatis-Plus扩展

7 MybatisX插件[扩展] 7.1 MybatisX插件介绍 MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。 安装方法:打开 IDEA,进入 File -> Settings -> Plugins -> Browse Repositories,输入 mybatisx 搜索并安装。 功…

【Midjourney】如何自定义一套参数

使用Midjourney有时候会遇到需要调整某些参数的时候,例如宽高之类的: --hd --ar 7:4 而Midjourney中提供了一条指令用于自定义一套参数方便重复使用。 以下指令创建一个名为“mine”的选项,翻译过来就是 --hd --ar 7:4: 创建成功后会有类似…

112. 路径总和详解!!三种解法,总有一款适合你(Java)

513.找树左下角的值 题目链接:513. 找树左下角的值 BFS(迭代)法: /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNod…

在Meteor Lake上测试基于Stable Diffusion的AI应用

上个月刚刚推出的英特尔新一代Meteor Lake CPU,预示着AI PC的新时代到来。AI PC可以不依赖服务器直接在PC端处理AI推理工作负载,例如生成图像或转录音频。这些芯片的正式名称为Intel Core Ultra处理器,是首款配备专门用于处理人工智能任务的 …

外包干了8个月,技术退步明显...

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

Java 的 Map 與 List

通過重新new 一個ArrayList 轉化 resTask.setList(new ArrayList<Group>(custMap.values())); 无序的Map List 有序的数据放到Map&#xff0c;就变成无序。 List排序 按照code 的字母进行排序A-Z resTask.getListData().sort(Comparator.comparing(Gmer::getCode));…