Redis-实现短信登录功能

33 阅读2分钟

一、功能核心:Redis-实现短信登录功能

利用 Redis 实现多服务间的登录状态共享,核心流程分为验证码发送登录 / 注册登录状态校验三部分。

二、流程 1:发送短信验证码

  1. 流程步骤

    • 提交手机号 → 校验手机号格式(不符合则重新提交)
    • 符合格式:生成验证码 → 以phone:手机号为 key,验证码为 value 存入 Redis(需设置过期时间)
    • 向用户发送验证码
  2. Redis 作用:临时存储验证码,实现分布式环境下的验证码统一校验。

二、流程 2:短信验证码登录 / 注册

  1. 流程步骤

    • 提交手机号 + 验证码 → 以phone:手机号为 key 从 Redis 读取验证码,校验是否一致(不一致则重新提交)

    • 一致:根据手机号查询用户是否存在

      • 不存在:创建新用户并保存到数据库
      • 存在:直接获取用户信息
    • 生成随机 Token → 以token:随机Token为 key,用户信息为 value 存入 Redis(设置过期时间)

    • 返回 Token 给客户端

  2. Redis 作用

    • 校验验证码的正确性
    • 存储用户登录状态(Token 对应用户信息),实现多服务共享登录状态。

三、流程 3:登录状态校验(拦截器)

  1. 拦截器 1(全局拦截)

    • 拦截所有请求 → 获取请求携带的 Token
    • token:Token为 key 从 Redis 查询用户信息
    • 若存在:将用户信息存入ThreadLocal(方便后续接口直接获取)+ 刷新 Token 的过期时间 → 放行
    • 若不存在:直接放行(由后续拦截器处理)
  2. 拦截器 2(需登录接口拦截)

    • 拦截需要登录的接口(如订单、用户信息接口)

    • 检查ThreadLocal中是否有用户信息

      • 不存在:拦截请求
      • 存在:继续请求对应接口
  3. Redis 作用

    • 存储登录状态,支持分布式环境下的状态共享
    • 通过 Token 过期时间实现自动登出,通过 “刷新过期时间” 实现 “活跃用户免登”。

四、核心优势

  • 分布式共享:Redis 替代传统 Session,解决多服务部署时的登录状态不共享问题
  • 性能高效:Redis 读写性能远高于数据库,支持高并发场景
  • 自动过期:利用 Redis 的过期时间,实现验证码、登录状态的自动失效,无需手动清理