【Redis】使用redis实现登录校验功能

一、发送验证码

业务流程是服务端向手机发送验证码,然后将手机号和验证码存到redis中。

二、登录注册

然后根据手机号登录,先查询redis中有没有对应的手机号,如果有拿到对应的验证码和请求过来手机号对应的验证码一致,如果一致登录成功。然后再mysql用户表查询是否有已经注册的用户,如果有就直接登录,如果没有先注册然后再返回登录成功的信息。

三、权限验证

登录成功会先向redis存储hash结构的用户登录信息,key是随机的token,value就是用户的信息。我们登录时候返回的的生成的token,然后前端把token设置到自己的请求头上某个字段,后续每次访问都会携带这个token。并且可以给这个key设置失效时间等,后续登录的过程验证就可以判断这个token是否失效就是根据redis的失效时间来控制的。

登录校验的时候可以设置两个拦截器,第一个拦截器只用来拦截获取用户信息,可以用threadlocal存,刷新token,第二个拦截器用来判断存储的用户信息是否为空,如果为空就需要拦截,如果有值说明token存在验证成功,不需要拦截。

为什么不用session,jwt,反而只用token呢?

答:因为如果是jwt的话,它的特点是根据加密方法签发一个token,一旦签发就不能修改,缺陷是一旦下发,服务后台无法拒绝携带该jwt的请求,如果要实现退出等操作由于他的一致存在性,导致需要将该jwt的信息加入黑名单等操作。还有它不需要存储在后端里,一旦生成发送给前端,由前端进行控制,获取数据判断是否过期等,因为它的关键信息存储在jwt里,所以有可能信息不安全。第二是session,它存储在服务器上,对于分布式环境下,不同服务器的session是不同,这需要我们需要同步他们之间的存储的session,这个过程可能会有一致性问题,还会有延迟的问题。那其实可以用上redis解决这个,不过只是用session生成的jsessionid作为类似于token的随机id作为key,数据还是由redis存储,解决这个一致性问题。

相关推荐
AOwhisky12 小时前
Redis 学习笔记(第一期):概述、安装配置与核心理论
运维·数据库·redis·笔记·学习·云计算
ytttr87312 小时前
C# 定时数据库备份工具
开发语言·数据库·c#
睡不醒男孩03082312 小时前
自建 Prometheus+Grafana 与 CLUP 深度监控 PG 集群有什么区别?
数据库·oracle
AOwhisky12 小时前
Redis 学习笔记(第四期):高可用与集群(哨兵 + Cluster + 容器化)
linux·运维·数据库·redis·笔记·学习·缓存
猫猫聚会Ing13 小时前
数据库设计 Prompt 提示词 - 构建与迭代
数据库
上海云盾-小余13 小时前
源站隐藏实战:规避裸 IP 被直接攻击的完整方案
数据库·网络协议·tcp/ip
微学AI14 小时前
时序大模型 TimechoAI 赋能工业时序数据底层技术优势与实操
数据库·大模型·时序大模型
北顾笙98014 小时前
MYSQL-day03
数据库·sql·mysql
MXsoft61814 小时前
**混合云统一监控实践:私有云+公有云的一体化运维方案**
运维·网络·数据库
MXsoft61814 小时前
**断网续传与本地缓存:弱网环境下的监控数据保障方案**
运维·缓存·自动化