044 用户注册功能04--完成注册功能

实现用户注册功能,需要对用户密码进行加密存储,使用MD5加密,加密过程中使用随机码作为salt加盐。另外还需要对用户输入的短信验证码进行校验。

1.接口说明

(1)接口路径:

POST /register

(2)返回结果:

无返回值。

状态码:

  • 201:注册成功

  • 400:参数有误,注册失败

  • 500:服务器内部异常,注册失败

(3)基本逻辑:

  • 1)校验短信验证码

  • 2)生成盐

  • 3)对密码加密

  • 4)写入数据库

  • 5)删除Redis中的验证码

2.UserController

/**
     * 注册
     * @param user  接收用户对象信息(form表单提交,user对象进行接收)
     * @param code 接收表单参数--手机验证码
     * @return
     */
    @PostMapping("register")
    public ResponseEntity<Void> register(User user, @RequestParam("code") String code) {
        Boolean boo = this.userService.register(user, code);
        if (boo == null || !boo) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
        }
        return new ResponseEntity<>(HttpStatus.CREATED);
    }

3.UserService

/**
     * 用户注册功能
     * @param user
     * @param code
     * @return
     */
    public Boolean register(User user, String code) {
        // 校验短信验证码
        String cacheCode = this.redisTemplate.opsForValue().get(KEY_PREFIX + user.getPhone());
        if (!StringUtils.equals(code, cacheCode)) {
            return false;
        }

        // 生成盐
        String salt = CodecUtils.generateSalt();
        user.setSalt(salt);

        // 对密码加密
        user.setPassword(CodecUtils.md5Hex(user.getPassword(), salt));

        // 强制设置不能指定的参数为null
        user.setId(null);
        user.setCreated(new Date());
        // 添加到数据库
        boolean b = this.userMapper.insertSelective(user) == 1;

        if(b){
            // 注册成功,删除redis中的记录
            this.redisTemplate.delete(KEY_PREFIX + user.getPhone());
        }
        return b;
    }

此处使用了CodeUtils:

该工具类需要apache加密工具包:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
</dependency>

4.测试

我们通过PostMan测试:

http://api.leyou.com/api/user/register?username=lucky&password=plj824&phone=17826828544&code=984971

查看数据库:

猜你喜欢

转载自www.cnblogs.com/luckyplj/p/11626888.html
044