用户注册流程
- 第一步:检查当前用户名是否已经注册
- 第二步:检查邮箱格式是否正确
- 第三步:检查该邮箱是否已经注册
- 第四步:检查邮箱验证码是否正确
- 第五步:检查图灵验证码是否正确
- 达到可以注册的条件
- 第六步:对密码进行加密
- 第七步:补全数据
- 包括:注册IP,登录IP,角色,头像,创建时间,更新时间
- 第八步:保存到数据库中
- 第九步:返回结果
邮箱校验
String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(邮箱地址);
用户注册实现
@Override
public ResponseResult register(SobUser sobUser, String emailCode, String captchaCode, String captchaKey, HttpServletRequest request) {
//第一步:检查当前用户名是否已经注册
String userName = sobUser.getUserName();
if (TextUtils.isEmpty(userName)) {
return ResponseResult.FAILED("用户名不可以为空.");
}
SobUser userByName = userDao.findOneByUserName(userName);
if (userByName != null) {
return ResponseResult.FAILED("该用户名已注册.");
}
//第二步:检查邮箱格式是否正确
String email = sobUser.getEmail();
if (TextUtils.isEmpty(email)) {
return ResponseResult.FAILED("邮箱地址不可以为空.");
}
if (!TextUtils.isEmailAddressOk(email)) {
return ResponseResult.FAILED("邮箱地址格式不正确");
}
//第三步:检查该邮箱是否已经注册
SobUser userByEmail = userDao.findOneByEmail(email);
if (userByEmail != null) {
return ResponseResult.FAILED("该邮箱地址已经注册");
}
//第四步:检查邮箱验证码是否正确
String emailVerifyCode = (String) redisUtils.get(Constants.User.KEY_EMAIL_CODE_CONTENT + email);
if (TextUtils.isEmpty(emailVerifyCode)) {
return ResponseResult.FAILED("邮箱验证码已过期");
}
if (!emailVerifyCode.equals(emailCode)) {
return ResponseResult.FAILED("邮箱验证码不正确");
} else {
//正确,干掉redis里的内容
redisUtils.del(Constants.User.KEY_EMAIL_CODE_CONTENT + email);
}
//第五步:检查图灵验证码是否正确
String captchaVerifyCode = (String) redisUtils.get(Constants.User.KEY_CAPTCHA_CONTENT + captchaKey);
if (TextUtils.isEmpty(captchaVerifyCode)) {
return ResponseResult.FAILED("人类验证码已过期");
}
if (!captchaVerifyCode.equals(captchaCode)) {
return ResponseResult.FAILED("人类验证码不正确");
} else {
redisUtils.del(Constants.User.KEY_CAPTCHA_CONTENT + captchaKey);
}
//达到可以注册的条件
//第六步:对密码进行加密
String password = sobUser.getPassword();
if (TextUtils.isEmpty(password)) {
return ResponseResult.FAILED("密码不可以为空");
}
sobUser.setPassword(bCryptPasswordEncoder.encode(sobUser.getPassword()));
//第七步:补全数据
//包括:注册IP,登录IP,角色,头像,创建时间,更新时间
String ipAddress = request.getRemoteAddr();
sobUser.setRegIp(ipAddress);
sobUser.setLoginIp(ipAddress);
sobUser.setUpdateTime(new Date());
sobUser.setCreateTime(new Date());
sobUser.setAvatar(Constants.User.DEFAULT_AVATAR);
sobUser.setRoles(Constants.User.ROLE_NORMAL);
sobUser.setState("1");
sobUser.setId(idWorker.nextId() + "");
//第八步:保存到数据库中
userDao.save(sobUser);
//第九步:返回结果
return ResponseResult.GET(ResponseState.JOIN_IN_SUCCESS);
}