24、短信登录(基于redis实现短信登录)

短信登录(基于redis实现短信登录)

修改代码(之前的基于session)

发送验证的逻辑:(更改就是将短信验证码存到redis中)

第一步:注入SrtingRedisTemplate (userserviceImpl中)

第二步:保存到redis中(.opsForValue().Set)

1、我们加个业务前缀显得有层次感

2、我们设置一个有效期(想我们用的验证码1分钟有效这种)

第三步:定义一些常量(防止我们前面的什么业务前缀写错了,而且更有逼格嘛)

声明一些常量(public static final)

优化:

短信验证码的登录和注册的逻辑:

改动1:验证验证码之前从session中获取,现在从redis中获取

改动2:用户信息判断后之前保存在session中,现在保存在redis中

  1. 保存在redis我们用存储用hash存储
  2. 注意redis的key用一个随机的token作为key
  3. Token还需要我们手动返回给前端

第一步:(opsForValue().get())

第二步:

第三步:

优化1:给token设置一个有效期(存的的时候无法设置,只有存完后再设置(这里的有效期是从我们登录开始算的))

优化二:(我们的有效期应该是我们只要一直在访问那么我的有效期应该一直是30。只有我们超过30分钟不访问我们我们才会把登录状态给删除)

解决思路:我们怎么知道用户是不是一直在访问?我们若是过了拦截器那我们就是在访问状态,只有我们不触发拦截器就是我们没有在一直访问。(我们去更改拦截器逻辑)

第一步:注入StringRedisTemplate(且只能通过构造函数来注入(因为这个拦截器的类是我们自己new出来的不是通过spring创建的:头上面有注解就是spring创建的))

我们如何注入?谁用到了他,就在谁哪里注入(去这个拦截器)

这里的逻辑我解释一下:这里的mvcConfig有@configuration所以我们就可以用注解@Resource去注入获取StringRedisTemplate对象。我们再放进去。那么后面在那里就拿到了

第二步:(解决逻辑)

改动了下

再改下bug:Long不能转发为String(其中StringRedisTemplate只能是string,string类型的存取(即key和value都要是string类型)。而我们UserDto的id是个Long就无法存进redis了)

 

改动:

总结:

猜你喜欢

转载自blog.csdn.net/logtcm4/article/details/127700794