(笔记总结自《黑马点评》项目)
实现短信验证码登录流程:
一、发送短信
Controller层:
@PostMapping("code")
public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
// TODO 发送短信验证码并保存验证码
// return Result.fail("功能未完成");
return userService.sendCode(phone,session);
}
Service层:
@Override
public Result sendCode(String phone, HttpSession session) {
//校验手机号
if (RegexUtils.isPhoneInvalid(phone)) {
//如果不符合,返回错误信息
return Result.fail("手机号格式错误!");
}
//符合,生成验证码
String code = RandomUtil.randomNumbers(6);
//保存验证码到session
session.setAttribute("code",code);
//发送验证码
log.debug("发送短信验证码成功"+":"+code);
//返回ok
return Result.ok();
}
二、验证码登录注册
Controller层:
@PostMapping("/login")
public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){
// TODO 实现登录功能
//return Result.fail("功能未完成");
return userService.login(loginForm, session);
}
Service层:
@Override
public Result login(LoginFormDTO loginForm, HttpSession session) {
//校验手机号
String phone = loginForm.getPhone();
if (RegexUtils.isPhoneInvalid(phone)) {
//如果不符合,返回错误信息
return Result.fail("手机号格式错误!");
}
//校验验证码
Object cacheCode = session.getAttribute("code");
String code = loginForm.getCode();
if(cacheCode == null || !cacheCode.toString().equals(code)){
//不一致,报错
return Result.fail("验证码错误");
}
//一致,根据手机号查询用户 select * from tb_user where phone = ?
User user = query().eq("phone", phone).one();
//判断用户是否存在
//不存在,创建新用户并保存
if(user == null){
user = createUserWithPhone(phone);
}
//存在,保存用户信息到session中
session.setAttribute("user",user);
return Result.ok();
}
private User createUserWithPhone(String phone) {
//创建用户
User user = new User();
user.setPhone(phone);
user.setNickName("user_"+RandomUtil.randomString(10));
//保存用户
save(user);
return user;
}
query()是mybatis-plus当中的查询方法,此案例中query()相当于"select * from tb_user"。在User类中有“@TableName("tb_user")”注解标明所查询数据表,one()表示返回一条数据,如果是多条数据用list()。save()是保存数据的方法。