PhoneLoginHandler.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package com.pavis.admin.auth.handler;
  2. import cn.hutool.core.util.IdUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.core.util.RandomUtil;
  5. import com.pavis.admin.system.model.entity.UserRoleDO;
  6. import com.pavis.admin.system.service.UserRoleService;
  7. import jakarta.annotation.Resource;
  8. import jakarta.servlet.http.HttpServletRequest;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.stereotype.Component;
  11. import com.pavis.admin.auth.AbstractLoginHandler;
  12. import com.pavis.admin.auth.enums.AuthTypeEnum;
  13. import com.pavis.admin.auth.model.req.PhoneLoginReq;
  14. import com.pavis.admin.auth.model.resp.LoginResp;
  15. import com.pavis.admin.common.constant.CacheConstants;
  16. import com.pavis.admin.system.model.entity.user.UserDO;
  17. import com.pavis.admin.system.model.resp.ClientResp;
  18. import top.continew.starter.cache.redisson.util.RedisUtils;
  19. import top.continew.starter.core.validation.ValidationUtils;
  20. import java.util.ArrayList;
  21. import java.util.List;
  22. /**
  23. * 手机号登录处理器
  24. *
  25. *
  26. *
  27. * @since 2024/12/22 14:59
  28. */
  29. @Component
  30. public class PhoneLoginHandler extends AbstractLoginHandler<PhoneLoginReq> {
  31. @Resource
  32. private UserRoleService userRoleService;
  33. @Override
  34. public LoginResp login(PhoneLoginReq req, ClientResp client, HttpServletRequest request) {
  35. // 验证手机号
  36. UserDO user = userService.getByPhone(req.getPhone());
  37. // ValidationUtils.throwIfNull(user, "此手机号未绑定本系统账号");
  38. // 手机号未绑定用户则自动注册
  39. if (ObjectUtil.isNull(user)) {
  40. String randomStr = RandomUtil.randomString(RandomUtil.BASE_CHAR, 5);
  41. // 设置基本信息
  42. user = new UserDO();
  43. String username = "user_" + randomStr + IdUtil.fastSimpleUUID();
  44. user.setPhone(req.getPhone());
  45. user.setUsername(username);
  46. user.setNickname(username);
  47. user.setIsFron(1); // 为前台角色
  48. // 保存用户并获取用户id
  49. userService.save(user);
  50. user = userService.getByPhone(req.getPhone());
  51. // 设置“插件用户角色”
  52. UserRoleDO userRole = new UserRoleDO(user.getId(), 698168080014012469L);
  53. List<UserRoleDO> users = new ArrayList<>();
  54. users.add(userRole);
  55. userRoleService.saveBatch(users);
  56. }
  57. // 检查用户状态
  58. super.checkUserStatus(user);
  59. // 执行认证
  60. String token = super.authenticate(user, client);
  61. return LoginResp.builder().token(token).build();
  62. }
  63. // @Override
  64. // public LoginResp login(PhoneLoginReq req, ClientResp client, HttpServletRequest request) {
  65. // // 验证手机号
  66. // UserDO user = userService.getByPhone(req.getPhone());
  67. // ValidationUtils.throwIfNull(user, "此手机号未绑定本系统账号");
  68. // // 检查用户状态
  69. // super.checkUserStatus(user);
  70. // // 执行认证
  71. // String token = super.authenticate(user, client);
  72. // return LoginResp.builder().token(token).build();
  73. // }
  74. @Override
  75. public void preLogin(PhoneLoginReq req, ClientResp client, HttpServletRequest request) {
  76. String phone = req.getPhone();
  77. String captchaKey = CacheConstants.CAPTCHA_KEY_PREFIX + phone;
  78. String captcha = RedisUtils.get(captchaKey);
  79. ValidationUtils.throwIfBlank(captcha, CAPTCHA_EXPIRED);
  80. ValidationUtils.throwIfNotEqualIgnoreCase(req.getCaptcha(), captcha, CAPTCHA_ERROR);
  81. RedisUtils.delete(captchaKey);
  82. }
  83. @Override
  84. public AuthTypeEnum getAuthType() {
  85. return AuthTypeEnum.PHONE;
  86. }
  87. }