【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存储,解决这个一致性问题。

相关推荐
翔云1234562 小时前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql
DevOpenClub2 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
aiks_yuan2 小时前
Token 放 Redis 还是用 JWT:Java 实测验签和查 Redis 耗时,退出登录、改密码踢下线怎么做(jjwt 0.12 + Redis 7.2)
redis
GeW3 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库
在多学一点5 小时前
MYSQL第二次作业
android·数据库·mysql
Risehuxyc5 小时前
Microsoft.Data.Sqlite体验
数据库·sqlite
骑着蜗牛撵大象3275 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
ZENERGY-众壹6 小时前
告警风暴怎么压?100MW 电站监控平台告警引擎架构复盘
数据库·架构·iot·电站监控
zhengfei6117 小时前
Go-fastdfs /reload 未授权访问: 有效PoC
数据库·sql
DevOpenClub8 小时前
高考教育信息问答 API:会话参数、资料引用与流式响应
java·数据库·高考