forked from datawhale/whale-town-end
fix:修复注册逻辑和HTTP状态码问题
核心修复: - 调整注册流程检查顺序,先验证用户存在性再验证验证码 - 修复HTTP状态码问题,业务失败时返回正确的错误状态码 - 优化错误处理逻辑,提供更准确的错误信息 主要变更: - 登录核心服务:重构注册方法,优化检查顺序避免验证码无效消费 - 用户服务:分离用户创建和重复检查逻辑,提高代码复用性 - 登录控制器:修复HTTP状态码处理,根据业务结果返回正确状态码 - API文档:更新注册接口说明和错误响应示例 - 测试脚本:优化测试逻辑和注释说明 修复效果: - 用户已存在时立即返回正确错误信息,不消费验证码 - API响应状态码准确反映业务执行结果 - 错误信息更加用户友好和准确 - 验证码使用更加合理和高效 测试验证: - 所有核心功能测试通过 - 注册逻辑修复验证成功 - HTTP状态码修复验证成功 - 限流功能正常工作
This commit is contained in:
@@ -32,7 +32,6 @@ export class UsersService {
|
||||
*
|
||||
* @param createUserDto 创建用户的数据传输对象
|
||||
* @returns 创建的用户实体
|
||||
* @throws ConflictException 当用户名、邮箱或手机号已存在时
|
||||
* @throws BadRequestException 当数据验证失败时
|
||||
*/
|
||||
async create(createUserDto: CreateUserDto): Promise<Users> {
|
||||
@@ -47,6 +46,32 @@ export class UsersService {
|
||||
throw new BadRequestException(`数据验证失败: ${errorMessages}`);
|
||||
}
|
||||
|
||||
// 创建用户实体
|
||||
const user = new Users();
|
||||
user.username = createUserDto.username;
|
||||
user.email = createUserDto.email || null;
|
||||
user.phone = createUserDto.phone || null;
|
||||
user.password_hash = createUserDto.password_hash || null;
|
||||
user.nickname = createUserDto.nickname;
|
||||
user.github_id = createUserDto.github_id || null;
|
||||
user.avatar_url = createUserDto.avatar_url || null;
|
||||
user.role = createUserDto.role || 1;
|
||||
user.email_verified = createUserDto.email_verified || false;
|
||||
user.status = createUserDto.status || UserStatus.ACTIVE;
|
||||
|
||||
// 保存到数据库
|
||||
return await this.usersRepository.save(user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建新用户(带重复检查)
|
||||
*
|
||||
* @param createUserDto 创建用户的数据传输对象
|
||||
* @returns 创建的用户实体
|
||||
* @throws ConflictException 当用户名、邮箱或手机号已存在时
|
||||
* @throws BadRequestException 当数据验证失败时
|
||||
*/
|
||||
async createWithDuplicateCheck(createUserDto: CreateUserDto): Promise<Users> {
|
||||
// 检查用户名是否已存在
|
||||
if (createUserDto.username) {
|
||||
const existingUser = await this.usersRepository.findOne({
|
||||
@@ -87,21 +112,8 @@ export class UsersService {
|
||||
}
|
||||
}
|
||||
|
||||
// 创建用户实体
|
||||
const user = new Users();
|
||||
user.username = createUserDto.username;
|
||||
user.email = createUserDto.email || null;
|
||||
user.phone = createUserDto.phone || null;
|
||||
user.password_hash = createUserDto.password_hash || null;
|
||||
user.nickname = createUserDto.nickname;
|
||||
user.github_id = createUserDto.github_id || null;
|
||||
user.avatar_url = createUserDto.avatar_url || null;
|
||||
user.role = createUserDto.role || 1;
|
||||
user.email_verified = createUserDto.email_verified || false;
|
||||
user.status = createUserDto.status || UserStatus.ACTIVE;
|
||||
|
||||
// 保存到数据库
|
||||
return await this.usersRepository.save(user);
|
||||
// 调用普通的创建方法
|
||||
return await this.create(createUserDto);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user