feat(auth): 优化注册功能并添加注册异常处理

- 新增 RegistrationException 类用于处理注册相关的异常
- 在全局异常处理器中添加 RegistrationException 的处理逻辑
- 修改用户服务中的注册逻辑,当用户名或邮箱已存在时抛出 RegistrationException
- 更新注册码实体类,将日期时间字段改为字符串类型
- 调整注册码生成和验证逻辑,使用字符串格式的日期时间
This commit is contained in:
ikmkj
2025-08-01 20:06:13 +08:00
parent ef22c0e4b6
commit df80ca6968
6 changed files with 69 additions and 10 deletions

View File

@@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
@Service
@@ -21,7 +22,8 @@ public class RegistrationCodeServiceImpl extends ServiceImpl<RegistrationCodeMap
String code = UUID.randomUUID().toString().replaceAll("-", "").substring(0, 16);
registrationCode.setCode(code);
registrationCode.setCreatedBy(creator);
registrationCode.setExpiryTime(LocalDateTime.now().plusDays(1));
registrationCode.setCreatedAt(LocalDateTime.now().toString());
registrationCode.setExpiryTime(LocalDateTime.now().plusDays(1).toString());
save(registrationCode);
return code;
}
@@ -37,7 +39,8 @@ public class RegistrationCodeServiceImpl extends ServiceImpl<RegistrationCodeMap
return false;
}
if (registrationCode.getExpiryTime().isBefore(LocalDateTime.now())) {
LocalDateTime expiryTime = LocalDateTime.parse(registrationCode.getExpiryTime());
if (expiryTime.isBefore(LocalDateTime.now())) {
remove(queryWrapper); // 注册码过期,删除
return false;
}
@@ -50,6 +53,6 @@ public class RegistrationCodeServiceImpl extends ServiceImpl<RegistrationCodeMap
@Override
@Scheduled(cron = "0 0 1 * * ?") // 每天凌晨1点执行
public void deleteExpiredCodes() {
remove(new QueryWrapper<RegistrationCode>().lt("expiry_time", LocalDateTime.now()));
remove(new QueryWrapper<RegistrationCode>().lt("expiry_time", LocalDateTime.now().toString()));
}
}

View File

@@ -3,6 +3,7 @@ package com.test.bijihoudaun.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.test.bijihoudaun.common.exception.RegistrationException;
import com.test.bijihoudaun.entity.User;
import com.test.bijihoudaun.mapper.UserMapper;
import com.test.bijihoudaun.service.UserService;
@@ -40,18 +41,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getUsername, username);
if (this.count(queryWrapper) > 0) {
return null;
throw new RegistrationException("用户名已存在");
}
queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getEmail, email);
if (this.count(queryWrapper) > 0) {
return null;
throw new RegistrationException("电子邮箱已被注册");
}
User user = new User();
user.setUsername(username);
user.setPassword(encrypt);
user.setEmail(email);
user.setCreatedAt(new Date());
// user.setCreatedAt(new Date()); // Let the database handle the default value
userMapper.insert(user);
return user;
}