# 统一认证接口规格

## ADDED Requirements

### Requirement: 合并后台和H5认证接口
系统 SHALL 提供统一认证接口 /api/auth/*，支持后台和 H5 两种场景的认证。

#### Scenario: 后台用户登录
- **WHEN** 用户调用 POST /api/auth/login，user_type IN (1,2,3,4)
- **THEN** 验证用户名+密码，返回 Access Token + Refresh Token

#### Scenario: H5用户登录
- **WHEN** H5 用户调用 POST /api/auth/login，user_type IN (3,4)
- **THEN** 验证用户名+密码，返回 Access Token + Refresh Token

#### Scenario: 登出统一接口
- **WHEN** 用户调用 POST /api/auth/logout
- **THEN** 删除 Redis 中的 Token，返回成功

#### Scenario: 刷新Token统一接口
- **WHEN** 用户调用 POST /api/auth/refresh-token
- **THEN** 验证 Refresh Token，返回新的 Access Token

#### Scenario: 获取用户信息统一接口
- **WHEN** 用户调用 GET /api/auth/me
- **THEN** 返回当前用户信息，包含 menus 和 buttons

### Requirement: 保留个人客户认证接口
系统 SHALL 保持个人客户认证接口 /api/c/v1/* 独立，不与后台/H5认证合并。

#### Scenario: 个人客户微信授权登录
- **WHEN** 个人客户调用 POST /api/c/v1/wechat/auth
- **THEN** 使用微信 OAuth 流程，返回 JWT Token

#### Scenario: 个人客户手机号登录
- **WHEN** 个人客户调用 POST /api/c/v1/login
- **THEN** 验证手机号+验证码，返回 JWT Token

#### Scenario: 个人客户获取资料
- **WHEN** 个人客户调用 GET /api/c/v1/profile
- **THEN** 返回个人客户资料（独立数据结构）

### Requirement: 删除旧认证接口路由
系统 SHALL 删除 /api/admin/login、/api/h5/login 等旧路由，统一为 /api/auth/*。

#### Scenario: 旧后台登录接口404
- **WHEN** 用户调用 POST /api/admin/login
- **THEN** 返回 404 Not Found

#### Scenario: 旧H5登录接口404
- **WHEN** 用户调用 POST /api/h5/login
- **THEN** 返回 404 Not Found

#### Scenario: 新统一接口正常工作
- **WHEN** 用户调用 POST /api/auth/login
- **THEN** 正常认证，返回 200 OK

### Requirement: 认证逻辑保持不变
系统 SHALL 保持认证逻辑不变，只修改路由路径。

#### Scenario: Token生成逻辑不变
- **WHEN** 用户登录成功
- **THEN** 生成相同格式的 Access Token（24小时）和 Refresh Token（7天）

#### Scenario: Token存储在Redis
- **WHEN** 生成 Token
- **THEN** 存储在 Redis，Key 格式为 "auth:token:{token}"

#### Scenario: 用户类型过滤不变
- **WHEN** 登录请求中包含 user_type
- **THEN** 验证用户类型是否与账号类型匹配

### Requirement: 响应格式保持兼容
系统 SHALL 保持登录响应格式兼容，包含 menus 和 buttons。

#### Scenario: 登录响应包含菜单
- **WHEN** 用户登录成功
- **THEN** 响应应包含 menus（菜单树结构）

#### Scenario: 登录响应包含按钮权限
- **WHEN** 用户登录成功
- **THEN** 响应应包含 buttons（按钮权限列表）

#### Scenario: 响应格式不变
- **WHEN** 用户登录成功
- **THEN** 响应格式应与旧接口完全一致，前端无需修改解析逻辑
