抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

趣评(QuPing)

这是一个仿虎扑的评分模块项目

技术栈为:Spring、SpringBoot、Mybatis、Redis、Lombok、Hutool

用户可以注册登录,并且对某些项目进行评分。

已经实现的一些接口

用户相关接口

  • 验证码登录
  • 获取验证码
  • 查看个人资料
  • 通过密码登录

评分相关接口

  • 根据id查看评分
  • 用户进行评分
  • 查看对应用户的对应评分

相关逻辑

用户通过验证码登录/注册

前端传入用户手机号->生成验证码保存在Redis中key:手机号,value:验证码->通过第三方API将验证码发送至用户手机->用户输入验证码->后端根据手机号在Redis中获取验证码并比对->通过手机号查找用户是否注册过,没有则创建一个账号->生成Token保存用户session并返回给前端

为了防止验证码的滥用,每次在要发送验证码前,会去redis中判断一下,该手机号是否正在进行登录流程,也就是redis中是否已经有这个手机号关联的验证码了,如果有则拒绝生成新的。

生成Token返回

首先用户登录后,会获取到后端返回的token,前端凭借每次请求携带用户token来代表用户身份。

在后端配置了一个SpringMVC的拦截器,实现了前置拦截方法,在这个方法中每次需要身份的请求都会被拦截并且获取请求体中的token,并将token解析成用户的上下文信息,并保存在用户的全局上下文工具类中,方便后续使用。

token本质上是一个随机的字符串,为了防止重复,使用了uuid,并且token关联用户的session是靠构造以token为key用户session为value的键值对。所以解析token就是根据token去redis中获取用户的session字符串,然后反序列化成User实体。

在注册/登录的时候,将用户的实体信息根据序列化成字符串,并且生成一个随机token与其关联,保存在redis中并返回。

但是这里有一个问题,如果用户不停的发送登入请求,那么后端就会不停的生成token,这样会导致资源浪费。所以需要某种手段来判断用户是否已经登录。

用户登入状态的判断

在用户登录后,需要生成token并返回,如果此时该用户已经登录了,则返回已经生成的token,避免单个用户重复生成不同token

通过redis中构造key为userID,value为token的键值对来保存用户的登录状态。

在登录后,生成token前,根据用户id去redis中查询一下是否已经有对应用户的token了,如果有则判断该token是否有效,如果有效则直接返回,否则生成新的token并保存在redis后再返回。

评论




本站总访问量为 访客数为

本站使用 Volantis 作为主题
载入中...