fix:修复API状态码和限流配置问题

- 修复登录控制器HTTP状态码问题,现在根据业务结果返回正确状态码
- 调整注册接口限流配置,从3次/5分钟放宽至10次/5分钟(开发环境)
- 新增清除限流记录的调试接口,便于开发测试
- 更新API文档,反映状态码修复和限流调整
- 添加测试脚本验证修复效果

主要修复:
- 业务失败时返回400/401而非200/201状态码
- 注册、登录、GitHub OAuth等接口现在正确处理错误状态码
- 限流配置更适合开发环境测试需求
This commit is contained in:
moyin
2025-12-24 19:41:21 +08:00
parent 64230db651
commit cb25703892
5 changed files with 245 additions and 35 deletions

View File

@@ -45,6 +45,7 @@
- `POST /auth/verify-email` - 验证邮箱验证码
- `POST /auth/resend-email-verification` - 重新发送邮箱验证码
- `POST /auth/debug-verification-code` - 调试验证码信息(开发环境)
- `POST /auth/debug-clear-throttle` - 清除限流记录(开发环境)
### 3. 管理员接口 (Admin)
- `POST /admin/auth/login` - 管理员登录
@@ -161,6 +162,11 @@
**功能描述**: 创建新用户账户
**重要说明**
- 如果提供邮箱,必须先调用发送验证码接口获取验证码
- 验证码验证失败会返回400状态码而不是201
- 注册成功返回201失败返回400
#### 请求参数
```json
@@ -169,7 +175,7 @@
"password": "password123",
"nickname": "测试用户",
"email": "test@example.com",
"phone": "+8613800138000"
"email_verification_code": "123456"
}
```
@@ -178,8 +184,9 @@
| username | string | 是 | 用户名只能包含字母、数字和下划线长度1-50字符 |
| password | string | 是 | 密码必须包含字母和数字长度8-128字符 |
| nickname | string | 是 | 用户昵称长度1-50字符 |
| email | string | 否 | 邮箱地址 |
| email | string | 否 | 邮箱地址(如果提供,必须先获取验证码) |
| phone | string | 否 | 手机号码 |
| email_verification_code | string | 条件必填 | 邮箱验证码,提供邮箱时必填 |
#### 响应示例
@@ -206,15 +213,30 @@
}
```
**失败响应** (409):
**失败响应** (400):
```json
{
"success": false,
"message": "用户名已存在",
"message": "提供邮箱时必须提供邮箱验证码",
"error_code": "REGISTER_FAILED"
}
```
**频率限制响应** (429):
```json
{
"success": false,
"message": "注册请求过于频繁请5分钟后再试",
"error_code": "TOO_MANY_REQUESTS",
"throttle_info": {
"limit": 10,
"window_seconds": 300,
"current_requests": 10,
"reset_time": "2025-12-24T11:26:41.136Z"
}
}
```
#### 3. GitHub OAuth登录
**接口地址**: `POST /auth/github`
@@ -504,6 +526,28 @@
}
```
#### 11. 清除限流记录
**接口地址**: `POST /auth/debug-clear-throttle`
**功能描述**: 清除所有限流记录(仅开发环境使用)
**注意**: 此接口用于开发测试清除所有IP的频率限制记录
#### 请求参数
#### 响应示例
**成功响应** (200):
```json
{
"success": true,
"message": "限流记录已清除"
}
```
### 管理员接口
**注意**:所有管理员接口都需要在 Header 中携带 `Authorization: Bearer <token>`,且用户角色必须为管理员 (role=9)。
@@ -1545,9 +1589,12 @@ curl -X GET http://localhost:3000/admin/logs/archive \
| 接口类型 | 限制规则 | 时间窗口 | 说明 |
|----------|----------|----------|------|
| 登录接口 | 2次/分钟 | 60秒 | 防止暴力破解 |
| 登录接口 | 5次/分钟 | 60秒 | 防止暴力破解 |
| 注册接口 | 10次/5分钟 | 300秒 | 防止批量注册(开发环境已放宽) |
| 发送验证码 | 1次/分钟 | 60秒 | 防止验证码滥发 |
| 密码重置 | 3次/小时 | 3600秒 | 限制密码重置频率 |
| 管理员操作 | 10次/分钟 | 60秒 | 限制管理员操作频率 |
| 一般接口 | 100次/分钟 | 60秒 | 防止接口滥用 |
| 一般接口 | 30次/分钟 | 60秒 | 通用API限制 | 100次/分钟 | 60秒 | 防止接口滥用 |
#### 响应示例
@@ -1555,12 +1602,23 @@ curl -X GET http://localhost:3000/admin/logs/archive \
```json
{
"statusCode": 429,
"message": "ThrottlerException: Too Many Requests",
"error": "Too Many Requests"
"success": false,
"message": "注册请求过于频繁请5分钟后再试",
"error_code": "TOO_MANY_REQUESTS",
"throttle_info": {
"limit": 10,
"window_seconds": 300,
"current_requests": 10,
"reset_time": "2025-12-24T11:26:41.136Z"
}
}
```
**重要说明**
- 频率限制基于IP地址
- 超过限制后需要等待到重置时间才能再次请求
- 开发环境下注册接口限制已放宽至10次/5分钟
### 2. 维护模式 (Maintenance Mode)
系统支持维护模式,在系统升级或维护期间暂停服务:
@@ -2023,13 +2081,16 @@ echo "📈 性能测试完成,请查看上述结果"
- 重新整理接口分类,将用户管理接口独立分类
- 确保文档与实际运行的服务完全一致
- 验证所有接口的请求参数和响应格式
- **修复HTTP状态码问题**:所有接口现在根据业务结果返回正确状态码
- **更新限流配置**注册接口限制调整为10次/5分钟开发环境
- **应用状态接口** (1个)
- `GET /` - 获取应用状态
- **用户认证接口** (10个)
- **用户认证接口** (11个)
- 用户登录、注册、GitHub OAuth
- 密码重置和修改功能
- 邮箱验证相关接口
- 调试验证码接口
- **新增**:清除限流记录接口(开发环境)
- **管理员接口** (6个)
- 管理员登录和用户管理
- 用户列表和详情查询
@@ -2041,13 +2102,15 @@ echo "📈 性能测试完成,请查看上述结果"
- 批量用户状态修改接口
- 用户状态统计接口
- **安全增强功能**
- 频率限制中间件 (Rate Limiting)
- 频率限制中间件 (Rate Limiting) - 已调整配置
- 维护模式中间件 (Maintenance Mode)
- 内容类型验证中间件 (Content Type Validation)
- 请求超时拦截器 (Request Timeout)
- 用户状态检查和权限控制
- **总计接口数量**: 20个API接口
- **修复**HTTP状态码现在正确反映业务执行结果
- **总计接口数量**: 21个API接口
- 完善错误代码和使用示例
- 修复路由冲突问题
- 确保文档与实际测试效果一致
- **重要修复**:解决了业务失败但返回成功状态码的问题