# 登录鉴权接口文档

本文档覆盖 HRO 管理后台当前登录链路：

```text
POST /api/auth/login
GET  /api/auth/me
POST /api/auth/logout
```

## 基本信息

本地服务地址：

```text
http://127.0.0.1:8080
```

登录接口免 Token 调用。读取当前用户和退出登录需要携带 Bearer Token：

```http
Authorization: Bearer <token>
```

## 默认账号

开发环境默认账号来自 `src/main/resources/application.yml`：

```text
账号：admin
密码：Admin@123456
```

也可以通过环境变量覆盖：

```text
HRO_AUTH_DEMO_ACCOUNT
HRO_AUTH_DEMO_PASSWORD
HRO_AUTH_DEMO_USER_ID
HRO_AUTH_DEMO_NAME
HRO_AUTH_DEMO_ORG_ID
HRO_AUTH_DEMO_ORG_NAME
```

## 通用响应

成功：

```json
{
  "code": 0,
  "message": "请求成功",
  "data": {}
}
```

业务失败：

```json
{
  "code": 401,
  "message": "账号或密码错误",
  "data": null
}
```

未登录或 Token 失效时 HTTP 状态码为 `401`：

```json
{
  "code": 401,
  "message": "登录已过期，请重新登录",
  "data": null
}
```

## 登录

### POST `/api/auth/login`

请求字段：

| 字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| account | string | 是 | 登录账号 |
| password | string | 是 | 登录密码 |
| captchaToken | string | 否 | 预留滑块/验证码凭证。当前默认不强制校验 |

请求示例：

```json
{
  "account": "admin",
  "password": "Admin@123456"
}
```

成功响应：

```json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiJ9...",
    "tokenType": "Bearer",
    "expiresAt": "2026-06-11T06:30:00Z",
    "user": {
      "id": "1000000000000000001",
      "account": "admin",
      "name": "HRO管理员",
      "orgId": "9017397430310779028",
      "orgName": "HRO 总部"
    }
  }
}
```

错误密码响应：

```json
{
  "code": 401,
  "message": "账号或密码错误",
  "data": null
}
```

参数缺失时 HTTP 状态码为 `400`：

```json
{
  "code": 400,
  "message": "请求参数不正确",
  "data": null
}
```

## 当前用户

### GET `/api/auth/me`

请求头：

```http
Authorization: Bearer <token>
```

响应：

```json
{
  "code": 0,
  "message": "请求成功",
  "data": {
    "id": "1000000000000000001",
    "account": "admin",
    "name": "HRO管理员",
    "orgId": "9017397430310779028",
    "orgName": "HRO 总部"
  }
}
```

## 退出登录

### POST `/api/auth/logout`

请求头：

```http
Authorization: Bearer <token>
```

响应：

```json
{
  "code": 0,
  "message": "请求成功",
  "data": true
}
```

退出成功后，原 Token 会从当前 TokenStore 中移除，再调用 `/api/auth/me` 会返回 `401`。

## Curl 联调示例

登录并读取 token：

```bash
TOKEN=$(curl -s -X POST http://127.0.0.1:8080/api/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"account":"admin","password":"Admin@123456"}' \
  | python3 -c 'import json,sys; print(json.load(sys.stdin)["data"]["token"])')
```

查询当前用户：

```bash
curl -s http://127.0.0.1:8080/api/auth/me \
  -H "Authorization: Bearer $TOKEN"
```

退出登录：

```bash
curl -s -X POST http://127.0.0.1:8080/api/auth/logout \
  -H "Authorization: Bearer $TOKEN"
```

## 当前实现说明

- 当前账号校验使用配置中的演示账号，后续接入数据库或外部账号体系时主要替换 `AuthService` 中的用户校验逻辑。
- 默认使用内存 TokenStore；设置 `HRO_AUTH_REDIS_ENABLED=true` 后可切换 Redis TokenStore。
- Token 默认有效期为 120 分钟，可通过 `HRO_AUTH_TOKEN_EXPIRE_MINUTES` 调整。
- `captchaToken` 字段已预留，默认不开启验证码强校验。
