(笔记总结自《黑马点评》项目)
实现短信验证码登录流程:

- @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()是保存数据的方法。