modify: auth插件拆分,将token签发部分交给网关
This commit is contained in:
+40
-32
@@ -1,26 +1,36 @@
|
||||
# Auth Worker 插件
|
||||
# Auth Worker 插件 — 用户管理
|
||||
|
||||
用户认证与授权插件,提供完整的用户管理系统。
|
||||
auth 域拆分后的**用户管理插件**(可替换的业务部分)。
|
||||
登录 / token 签发 / admin 种子已**内置在网关**(管理平面底线,不依赖本插件是否
|
||||
加载,本插件缩容到 0 或全部副本故障时登录与 admin API 仍可用)。
|
||||
|
||||
共享契约归 `chongming-auth` 包(`utils/auth/`):Users 模型(唯一权威定义)、
|
||||
建库、登录校验、JWT 签发。本插件与网关内置登录**共用同一张 users 表**。
|
||||
|
||||
---
|
||||
|
||||
## 功能
|
||||
|
||||
- **用户注册**:用户名 + 邮箱 + 密码注册,自动校验唯一性
|
||||
- **用户登录**:JWT Token 签发,有效期 3 小时
|
||||
- **获取用户信息**:根据 JWT Token 获取完整用户档案
|
||||
- **修改密码**:旧密码验证 + 新密码更新
|
||||
- **更新资料**:更新全名、邮箱、头像、手机号等信息
|
||||
- **自动初始化**:首次启动自动创建 `admin` 管理员账户
|
||||
|
||||
(登录 `POST /auth/login` 由网关内置提供,路径与响应 shape 不变)
|
||||
|
||||
---
|
||||
|
||||
## 数据库
|
||||
|
||||
使用 SQLite(通过 `chongming-database` 异步封装),数据库文件位于 `data/storage/chongming/auth.db`。
|
||||
使用 SQLite(通过 `chongming-database` 异步封装),数据库文件位于
|
||||
`data/auth.db`(`[workers.config].data_dir` 下);配置 `database.url` 时走
|
||||
PostgreSQL。库位置与网关内置登录读同一份配置(本插件 `config.toml` 的
|
||||
`[workers.config]`),指向同一张 users 表。
|
||||
|
||||
### Users 表结构
|
||||
|
||||
权威定义见 `chongming_auth.models.Users`(本仓库 `models/auth.py` 仅为 re-export):
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
| ----------------- | ----------------- | --------------------------------- |
|
||||
| `id` | `str` (PK) | UUID 格式主键 |
|
||||
@@ -45,6 +55,27 @@
|
||||
|
||||
所有端点路由前缀为 `/auth`。
|
||||
|
||||
### `POST /auth/login` — 登录(网关内置)
|
||||
|
||||
无需认证。由网关核心 `chongming/app/routes/auth.py` 提供(非本插件),
|
||||
路径与响应 shape 与拆分前一致。JWT claims 契约见 `chongming-auth` 包 README。
|
||||
|
||||
```json
|
||||
// 请求
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
}
|
||||
|
||||
// 响应
|
||||
{
|
||||
"result": "success",
|
||||
"token": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"message": "登录成功",
|
||||
"timestamp": 1720000000.123
|
||||
}
|
||||
```
|
||||
|
||||
### `POST /auth/register` — 用户注册
|
||||
|
||||
无需认证。
|
||||
@@ -68,28 +99,6 @@
|
||||
}
|
||||
```
|
||||
|
||||
### `POST /auth/login` — 登录
|
||||
|
||||
无需认证。
|
||||
|
||||
```json
|
||||
// 请求
|
||||
{
|
||||
"username": "admin",
|
||||
"password": "admin"
|
||||
}
|
||||
|
||||
// 响应
|
||||
{
|
||||
"result": "success",
|
||||
"token": "eyJhbGciOiJIUzI1NiIs...",
|
||||
"message": "登录成功",
|
||||
"timestamp": 1720000000.123
|
||||
}
|
||||
```
|
||||
|
||||
JWT Token 有效期 3 小时,载荷包含:`sub`(用户ID)、`username`、`email`、`full_name`、`is_superuser` 等。
|
||||
|
||||
### `GET /auth/me?user_id=<id>` — 获取用户信息
|
||||
|
||||
需要 JWT 鉴权(`Authorization: Bearer <token>`)。
|
||||
@@ -159,9 +168,9 @@ JWT Token 有效期 3 小时,载荷包含:`sub`(用户ID)、`username`
|
||||
|
||||
## 默认管理员账户
|
||||
|
||||
插件基于 `Plugin` 基类统一生命周期:`on_init` 中执行管理员种子逻辑
|
||||
(先按用户名、再按邮箱兜底查询;多进程并发启动时靠唯一约束 + `IntegrityError` 回滚保证幂等),
|
||||
数据库 `auth.db` 由基类统一初始化并在 cleanup 时释放。
|
||||
admin 种子逻辑随登录一并内置到网关(网关 lifespan 的 `setup_auth_store`
|
||||
→ `chongming_auth.seed_admin`,幂等,多进程并发启动安全),不再依赖本插件。
|
||||
数据库 `auth.db` 本插件仍由 `Plugin` 基类统一初始化并在 cleanup 时释放。
|
||||
|
||||
首次启动时自动创建:
|
||||
|
||||
@@ -190,8 +199,7 @@ JWT Token 有效期 3 小时,载荷包含:`sub`(用户ID)、`username`
|
||||
|
||||
| 工具包 | 用途 |
|
||||
| -------------------- | ------------------------------------ |
|
||||
| `chongming-auth` | Users 模型 / 建库 / 登录校验 / 签发(共享契约) |
|
||||
| `chongming-database` | 异步 SQLite 数据库操作 |
|
||||
| `chongming-jwt` | Rust JWT 编码/验证 |
|
||||
| `chongming-password` | Rust Argon2id 密码哈希 |
|
||||
| `chongming-config` | 全局配置加载 |
|
||||
| `chongming-worker` | `@rpc_method` 装饰器 + Worker 运行时 |
|
||||
|
||||
Reference in New Issue
Block a user