up:: 生成验证码存储到redis

说明:

我们的注册接口参数只有用户名和密码,显然不符合要求,还需要传入邮箱地址和邮箱验证码

开发注册接口验证

1.打开User的controller层,选择注册接口进行开发

/**
 * 注册
 */
@PostMapping("/register")
@ResponseBody
public ApiRestResponse register(@RequestParam("userName") String userName,
        @RequestParam("password") String password, @RequestParam("emailAddress") String emailAddress,
                                @RequestParam("verificationCode") String verificationCode) throws ImoocMallException {
    if (StringUtils.isEmpty(userName)) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_USER_NAME);
    }
    if (StringUtils.isEmpty(password)) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_PASSWORD);
    }
    //密码长度不能少于8位
    if (password.length() < 8) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.PASSWORD_TOO_SHORT);
    }
    if (StringUtils.isEmpty(emailAddress)) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_EMAIL_ADDRESS);
    }
    if (StringUtils.isEmpty(verificationCode)) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_VERIFICATION_CODE);
    }
    //如果邮箱已注册,则不允许再次注册
    boolean emailPassed = userService.checkEmailRegistered(emailAddress);
    if (!emailPassed) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.EMAIL_ALREADY_BEEN_REGISTERED);
    }
    //校验邮箱和验证码是否匹配
    Boolean passEmailAndCode = emailService.checkEmailAndCode(emailAddress, verificationCode);
    if (!passEmailAndCode) {
        return ApiRestResponse.error(ImoocMallExceptionEnum.WRONG_VERIFICATION_CODE);
    }
    userService.register(userName, password, emailAddress);
    return ApiRestResponse.success();
}

说明: 抛出的异常:

2.开发EmailService层,进行注册验证

说明: 抛出的异常:

反向生成接口:

Boolean checkEmailAndCode(String emailAddress, String verificationCode);

3.修改mapper层,进行email字段插入

说明: 记得接口也要加上字段 UserService.java接口文件:

void register(String userName,String password,String emailAddress) throws ImoocMallException;

注册验证测试

1.发送邮件,获取注册验证码

2.在注册用户模块添加email字段

1.验证码为空的请况

2.验证码错误情况

3. 验证码正确情况

因为只有60s的缓存时间,我们重新生成验证码测试

再来一次

可以看到已经成功

查看数据库