• 基于session实现发送短信和验证码登录注册功能


    (笔记总结自《黑马点评》项目)

    实现短信验证码登录流程:

    一、发送短信

    Controller层

    1. @PostMapping("code")
    2. public Result sendCode(@RequestParam("phone") String phone, HttpSession session) {
    3. // TODO 发送短信验证码并保存验证码
    4. // return Result.fail("功能未完成");
    5. return userService.sendCode(phone,session);
    6. }

    Service层:

    1. @Override
    2. public Result sendCode(String phone, HttpSession session) {
    3. //校验手机号
    4. if (RegexUtils.isPhoneInvalid(phone)) {
    5. //如果不符合,返回错误信息
    6. return Result.fail("手机号格式错误!");
    7. }
    8. //符合,生成验证码
    9. String code = RandomUtil.randomNumbers(6);
    10. //保存验证码到session
    11. session.setAttribute("code",code);
    12. //发送验证码
    13. log.debug("发送短信验证码成功"+":"+code);
    14. //返回ok
    15. return Result.ok();
    16. }

    二、验证码登录注册

    Controller层:

    1. @PostMapping("/login")
    2. public Result login(@RequestBody LoginFormDTO loginForm, HttpSession session){
    3. // TODO 实现登录功能
    4. //return Result.fail("功能未完成");
    5. return userService.login(loginForm, session);
    6. }

    Service层:

    1. @Override
    2. public Result login(LoginFormDTO loginForm, HttpSession session) {
    3. //校验手机号
    4. String phone = loginForm.getPhone();
    5. if (RegexUtils.isPhoneInvalid(phone)) {
    6. //如果不符合,返回错误信息
    7. return Result.fail("手机号格式错误!");
    8. }
    9. //校验验证码
    10. Object cacheCode = session.getAttribute("code");
    11. String code = loginForm.getCode();
    12. if(cacheCode == null || !cacheCode.toString().equals(code)){
    13. //不一致,报错
    14. return Result.fail("验证码错误");
    15. }
    16. //一致,根据手机号查询用户 select * from tb_user where phone = ?
    17. User user = query().eq("phone", phone).one();
    18. //判断用户是否存在
    19. //不存在,创建新用户并保存
    20. if(user == null){
    21. user = createUserWithPhone(phone);
    22. }
    23. //存在,保存用户信息到session中
    24. session.setAttribute("user",user);
    25. return Result.ok();
    26. }
    27. private User createUserWithPhone(String phone) {
    28. //创建用户
    29. User user = new User();
    30. user.setPhone(phone);
    31. user.setNickName("user_"+RandomUtil.randomString(10));
    32. //保存用户
    33. save(user);
    34. return user;
    35. }

    query()是mybatis-plus当中的查询方法,此案例中query()相当于"select * from tb_user"。在User类中有“@TableName("tb_user")”注解标明所查询数据表,one()表示返回一条数据,如果是多条数据用list()。save()是保存数据的方法。

  • 相关阅读:
    gRPC(七)进阶:自定义身份验证
    javascript入门(引入方式,数据类型,变量)
    浅谈数据中心机房UPS蓄电池在线监测系统研究
    【Redis入门笔记 05】Jedis 简介 & SpringBoot 集成
    【SpringCloud】Spring Cloud Gateway实现接口防篡改
    小解C语言文件编译过程【linux】
    Uniapp零基础开发学习笔记(10) -地图组件的使用
    红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)
    英特尔助力腾讯云深度优化云硬盘CBS 产品,打造极速云存储体验
    HTTP协议
  • 原文地址:https://blog.csdn.net/m0_64694079/article/details/132725884