发送手机验证码页面流程

发送验证码:
java
/**
* 发送短信验证码。
*
* @param phone手机号
* @param session当前Session对象
* @return处理结果
*/
@PostMapping("code")
public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
// TODO发送短信验证码并保存验证码
//return Result.fail("功能未完成");
return userService.sendCode(phone, session);
}
/**
* 发送短信验证码。
*
* 作用:
* 1.检验手机号格式是否正确;
* 2.格式不对,返回错误信息;
* 3.格式正确,生成验证码;
* 4.保存验证码到Session;
* 5.模拟发送短信验证码;
*
* @param phone手机号
* @param session当前Session对象
* @return处理结果
*/
@Override
public Result sendCode(String phone, HttpSession session) {
//检验手机号格式是否正确
if(!RegexUtils.isPhoneInvalid(phone)) {
//格式不对,返回错误信息
return Result.fail("手机格式错误");
}
//格式正确,生成验证码
String code= RandomUtil.randomNumbers(6);
//保存验证码到session
session.setAttribute(phone,code);
//模拟发送短信验证码
log.debug("向{}发送短信验证码成功,验证码:{}",phone,code);
//返回ok
return Result.ok();
}真实短信业务参见:短信服务-短信服务-阿里云
登录页面流程

登录与注册:
java
/**
* 校验验证码并完成登录。
*
* 作用:
* 1.检验手机号是否一致,不同请求,保持一致;
* 2.校验验证码;
* 3.如果没有发送验证码,或者验证码不一致;
* 4.不一致,返回错误;
* 5.一致,根据手机号查询用户;
*
* @param loginFormDTO登录表单DTO
* @param session当前Session对象
* @return处理结果
*/
@Override
public Result login(LoginFormDTO loginFormDTO, HttpSession session) {
//检验手机号是否一致,不同请求,保持一致
String phone=loginFormDTO.getPhone();
if(!RegexUtils.isPhoneInvalid(phone)) {
return Result.fail("手机号格式错误");
}
//校验验证码
Object cacheCode=session.getAttribute(phone);
String code=loginFormDTO.getCode();
//如果没有发送验证码,或者验证码不一致
if(cacheCode==null||!cacheCode.toString().equals(code)) {
//不一致,返回错误
return Result.fail("验证码错误");
}
//一致,根据手机号查询用户
User user=query().eq("phone",phone).one();
//如果用户不存在,创建用户
if(user==null){
user=createUserWithPhone(phone);
}
//保存用户到Session //转为DTO类型,传统方法new,然后一个个设置,工具类更方便
session.setAttribute("user", BeanUtil.copyProperties(user, UserDTO.class));
//前端cookie携带了sessionId不需要再返回sessionId了
return Result.ok();
}
/**
* 根据手机号创建新用户。
*
* @param phone手机号
* @return处理结果
*/
private User createUserWithPhone(String phone) {
User user=new User();
user.setPhone(phone);
user.setNickName(SystemConstants.USER_NICK_NAME_PREFIX+RandomUtil.randomString(6));
save(user);
return user;
}