# 后端登录逻辑说明

## 当前用户信息

### 管理员账号
- **用户名**: `admin`
- **邮箱**: `admin@qq.com`
- **密码**: `123456`
- **权限**: 管理员 (is_admin=True)

### 普通用户账号
- **用户名**: `zhangsan`
- **邮箱**: `zhangsan@qq.com`
- **密码**: `123456`
- **权限**: 普通用户 (is_admin=False)

## 登录流程

### 1. 后端登录API
- **路径**: `POST /api/users/login`
- **格式**: OAuth2PasswordRequestForm (application/x-www-form-urlencoded)
- **参数**:
  ```
  username: admin
  password: 123456
  ```
- **返回**:
  ```json
  {
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "token_type": "bearer"
  }
  ```

### 2. 获取用户信息
- **路径**: `GET /api/users/me`
- **Headers**: `Authorization: Bearer {token}`
- **返回**:
  ```json
  {
    "id": 1,
    "username": "admin",
    "email": "admin@qq.com",
    "is_admin": true,
    "is_active": true
  }
  ```

### 3. 管理端登录验证
管理端会额外检查 `is_admin` 字段，只有管理员才能登录管理后台。

## 前端登录代码

```javascript
const onLogin = async (values) => {
  // 1. 构造 form-data 格式
  const formData = new URLSearchParams();
  formData.append('username', values.username);
  formData.append('password', values.password);

  // 2. 发送登录请求
  const res = await api.post('/users/login', formData);
  const token = res.data.access_token;

  // 3. 获取用户信息
  const userRes = await api.get('/users/me', {
    headers: { Authorization: `Bearer ${token}` },
  });

  // 4. 验证管理员权限
  if (!userRes.data.is_admin) {
    message.error('拒绝访问，仅限管理员。');
    return;
  }

  // 5. 保存认证信息
  setAuth(userRes.data, token);
  navigate('/dashboard');
};
```

## 常见问题排查

### 问题1: 密码错误
**原因**: 
- 后端服务器未启动
- 数据库中的密码哈希不匹配

**解决方案**:
```bash
# 1. 启动后端服务器
cd backend
./venv/Scripts/python.exe main.py

# 2. 重置密码（如果需要）
./venv/Scripts/python.exe reset_password.py
```

### 问题2: 无法连接到服务器
**原因**: 后端服务器未运行

**解决方案**:
```bash
cd backend
./venv/Scripts/python.exe main.py
# 或者
uvicorn main:app --reload --host 0.0.0.0 --port 8000
```

### 问题3: CORS错误
**原因**: 跨域配置问题

**解决方案**: 
后端已配置允许所有来源，检查 `main.py` 中的 CORS 配置：
```python
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)
```

## 启动步骤

### 1. 启动后端
```bash
cd backend
./venv/Scripts/python.exe main.py
```
或者
```bash
cd backend
./venv/Scripts/activate
uvicorn main:app --reload
```

### 2. 启动管理端前端
```bash
cd admin_frontend
npm run dev
```

### 3. 访问管理端
打开浏览器访问: `http://localhost:5173`

使用以下凭据登录:
- 用户名: `admin`
- 密码: `123456`

## 密码验证测试

运行以下脚本测试密码是否正确:
```bash
cd backend
./venv/Scripts/python.exe test_login.py
```

## API测试

使用 curl 测试登录API:
```bash
curl -X POST "http://localhost:8000/api/users/login" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "username=admin&password=123456"
```

## 注意事项

1. **后端必须先启动**: 前端登录前确保后端服务在 `http://localhost:8000` 运行
2. **密码格式**: 使用 form-data 格式，不是 JSON
3. **管理员权限**: 管理端只允许 `is_admin=true` 的用户登录
4. **Token存储**: Token 存储在 localStorage 中，key 为 `admin_token`
