【探花交友】用户登录总结

以你之姓@ 2024-04-03 10:41 201阅读 0赞

1.发送验证码

1.发送post请求 数据封装在map 获取map的手机号码

2.调用service层将手机号码 传入过去

3.正常返回状态码200

  1. @RestController
  2. @RequestMapping("/user")
  3. public class LoginController {
  4. @Autowired
  5. private UserService userService;
  6. /**
  7. * 获取登录验证码
  8. * 请求参数:phone (Map)
  9. * 响应:void
  10. */
  11. @PostMapping("/login")
  12. public ResponseEntity login(@RequestBody Map map){
  13. String phone =(String) map.get("phone");
  14. userService.sendMsg(phone);
  15. return ResponseEntity.ok(null); //正常返回状态码200
  16. }
  17. }

1.随机生成6位数字验证码

2.将验证码存入reids 使用固定前缀+手机号码 过期时间5分钟

  1. @Service
  2. public class UserService {
  3. @Autowired
  4. private SmsTemplate template;
  5. @Autowired
  6. private RedisTemplate<String,String> redisTemplate;
  7. /**
  8. * 发送短信验证码
  9. * @param phone
  10. */
  11. public void sendMsg(String phone) {
  12. //1、随机生成6位数字
  13. //String code = RandomStringUtils.randomNumeric(6);
  14. String code = "123456";
  15. //2、调用template对象,发送手机短信
  16. //template.sendSms(phone,code);
  17. //3、将验证码存入到redis
  18. redisTemplate.opsForValue().set("CHECK_CODE_"+phone,code, Duration.ofMinutes(5));
  19. }
  20. }

2.用户登录

1.从map中获得手机号码 和 验证码

2.调用service层 传入手机号码 和验证码

3.返回map map里必须要有token信息 和 isNew 是否新用户

  1. /**
  2. * 检验登录
  3. */
  4. @PostMapping("/loginVerification")
  5. public ResponseEntity loginVerification(@RequestBody Map map) {
  6. //1、调用map集合获取请求参数
  7. String phone = (String) map.get("phone");
  8. String code = (String) map.get("verificationCode");
  9. //2、调用userService完成用户登录
  10. Map retMap = userService.loginVerification(phone,code);
  11. //3、构造返回
  12. return ResponseEntity.ok(retMap);
  13. }

4.从redis获取验证码

5.对redis验证码进行一个非空判断(防止已经删除了) 与 对传入来的验证码进行一个校验 如果

redis验证码非空 或 验证码错误 则抛出异常

6.删除redis存的验证码(防止重复使用)

7.创建一个boolean值 isNew 默认是false(不是新用户)

8.调用api传入手机号 查找用户

9.判断用户是否存在

8.如果不存在就是新用户 重新new一个(因为没查找出来是null 必须在new一个) 设置他的手机

号码 以及密码(密码默认123456 md5加密) 然后保存 返回它的用户id(这里我有点不懂 insert 之后

为什么user 就有id)

9.将id设置给user isNew=true 表示是个新用户

10.创建map 存入id和手机号码 使用jwt加密成token

11.创建map保存数据 将生成的token存入进去 和 isNew 返回给controller层

  1. /**
  2. * 验证登录
  3. * @param phone
  4. * @param code
  5. */
  6. public Map loginVerification(String phone, String code) {
  7. //1、从redis中获取下发的验证码
  8. String redisCode = redisTemplate.opsForValue().get("CHECK_CODE_" + phone);
  9. //2、对验证码进行校验(验证码是否存在,是否和输入的验证码一致)
  10. if(StringUtils.isEmpty(redisCode) || !redisCode.equals(code)) {
  11. //验证码无效
  12. throw new RuntimeException();
  13. }
  14. //3、删除redis中的验证码
  15. redisTemplate.delete("CHECK_CODE_" + phone);
  16. //4、通过手机号码查询用户
  17. User user = userApi.findByMobile(phone);
  18. boolean isNew = false;
  19. //5、如果用户不存在,创建用户保存到数据库中
  20. if(user == null) {
  21. user = new User();
  22. user.setMobile(phone);
  23. user.setPassword(DigestUtils.md5Hex("123456"));
  24. Long userId = userApi.save(user);
  25. user.setId(userId);
  26. isNew = true;
  27. }
  28. //6、通过JWT生成token(存入id和手机号码)
  29. Map tokenMap = new HashMap();
  30. tokenMap.put("id",user.getId());
  31. tokenMap.put("mobile",phone);
  32. String token = JwtUtils.getToken(tokenMap);
  33. //7、构造返回值
  34. Map retMap = new HashMap();
  35. retMap.put("token",token);
  36. retMap.put("isNew",isNew);
  37. return retMap;
  38. }

发表评论

表情:
评论列表 (有 0 条评论,201人围观)

还没有评论,来说两句吧...

相关阅读

    相关 交友项目面试分析

    1、项目介绍 探花交友是一个陌生人在线交友平台,在该平台中可以搜索附近的人,查看好友动态,平台提供大数据分析,通过后台推荐系统帮我们快速匹配自己的“意中人”。项目主要分为