Redis从理论到实战:如何使用redis实现短信登录与注册?_使用redis来做一个短信验证注册账号(2)


加油加油,不要过度焦虑O(∩_∩)O


一、基于session实现短信登录

为了方便理解,先来看看不用redis,基于session来实现登录;然后分析存在的问题缺陷,最后用redis解决存在的问题!

1、实现发送验证码功能

Redis从理论到实战:如何使用redis实现短信登录与注册?_使用redis来做一个短信验证注册账号(2)_第1张图片

思路分析:

  • 首先验证输入的手机号格式是否正确;不正确则重新输入手机号,正确则模拟发送6位数的验证码;
  • 最后把手机号和验证码保存到session中。

代码:

    @PostMapping("/code")
    public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
        return userService.generateCode(phone, session);
    }
    @Override
    public Result generateCode(String phone, HttpSession session) {
        if (RegexUtils.isPhoneInvalid(phone)) {
            return Result.fail("手机号格式错误");
        }
        //手机号格式正确,则生成验证码
        String code = RandomUtil.randomNumbers(6);
        //将验证码和手机号保存到session
        session.setAttribute("code", code);
        session.setAttribute("phone", phone);
        log.info("生成的验证码是:{}", code);
        return Result.ok();
    }

2、实现用户登录和注册功能(小优化)

思路分析:

  • 从session中获取手机号(避免用户获取验证码后修改手机号),如果手机号跟表单中的手机号不一致(即用户修改了手机号),则让用户重新发送验证码;
  • 接着从session中获取验证码,如果表单中的验证码和发送的验证码不一致,则让用户重新输入验证码;
  • 然后从数据库中查询是否存在该手机号(即该用户是否已经注册过),如果不存在,则把该用户插入到数据库;
  • 最后返回用户信息(为了减少Tomcat服务器的内存消耗以及用户信息的安全,会使用UserDTO类来返回用户的部分信息)

代码:<

你可能感兴趣的:(程序员,redis,数据库,缓存)