# 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 | ## 稳定契约(改动即破坏性变更) 1. **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 验签。 2. **登录响应 shape**:`{result, token, message, timestamp}`,失败文案 (`用户名错误` / `密码错误` / `用户已经注销或被禁用`)与前端兼容。 3. **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 插件读取同一份配置,指向同一张表。 ## 用法 ```python 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) ``` ## 开发 ```bash cd utils/auth uv sync uv run pytest ```