2.3 KiB
2.3 KiB
chongming-auth
auth 域共享契约包:网关内置登录与 auth 插件(用户管理)的公共依赖。 两侧不允许互相 import(插件/worker SDK 保持与网关解耦),共享物只放这里。
职责拆分(auth 域)
| 部分 | 归属 | 说明 |
|---|---|---|
| Users 模型(唯一权威定义) | 本包 | 禁止在别处重复定义同表模型 |
| 建库 / admin 种子 / 登录校验 / JWT 签发 | 本包 | store.py |
POST /api/v1/auth/login(内置登录端点) |
网关核心 chongming/app/routes/auth.py |
管理平面可用性底线:auth 插件缩容/故障时登录与 admin API 仍可用 |
| 注册 / 资料 / 改密(用户管理) | auth 插件 plugins.auth |
可替换的业务部分,支持 inline/external |
稳定契约(改动即破坏性变更)
- JWT claims:
sub / username / email / full_name / avatar_url / phone / is_verified / is_superuser / created_at / updated_at / last_login_at, token 有效期默认 10800s(DEFAULT_TOKEN_EXPIRES_SECONDS)。 网关 admin API 依赖is_superuser判定超管(worker_admin.py); 网关 JWT 校验依赖(core/auth.py)按[security]的 secret/algorithm 验签。 - 登录响应 shape:
{result, token, message, timestamp},失败文案 (用户名错误/密码错误/用户已经注销或被禁用)与前端兼容。 - users 表 schema:对既有
auth.db(SQLite)与 PostgreSQL users 表零迁移。
数据库定位
与 chongming_worker.Plugin.init_database 语义一致:
- 配置含
database.url(插件 config.toml 的[workers.config.database])→ PostgreSQL; - 否则 SQLite:
data_dir/auth.db([workers.config]的data_dir,默认./data)。
网关 lifespan(setup_auth_store)与 auth 插件读取同一份配置,指向同一张表。
用法
from chongming_auth import open_database, seed_admin, verify_login, issue_token
db = await open_database({"data_dir": "./data"}) # 或 {"database": {"url": "postgresql://..."}}
await seed_admin(db) # 幂等,多进程并发安全
user, message = await verify_login(db, "admin", "admin")
if user is not None:
token = issue_token(user, secret, algorithm)
开发
cd utils/auth
uv sync
uv run pytest