fix(api): support configurable users password column mapping

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-05-01 11:21:57 +08:00
parent c8ec27c6aa
commit 8c9699cd46
6 changed files with 34 additions and 1 deletions
+24
View File
@@ -106,3 +106,27 @@
- 风险与影响:
- 影响范围:仅 GitHub 发布脚本默认值,不影响已存在且手工维护的服务器 `.env`
- 若线上环境明确依赖 `5433`,需在服务器 `.env` 显式保留 `POSTGRES_PORT=5433`
## Work Log - 修复 API 启动时报 users.password 列不存在(2026-05-01
- 背景:
- 启动报错 `psycopg.errors.UndefinedColumn: column users.password does not exist`
- 触发点在 `seed_defaults -> _seed_permissions` 的查询过程中,SQLAlchemy 关系预加载 `Role.users` 时会查询 `users` 全字段;当前 ORM 将 `password_hash` 绑定到 `users.password`,但目标库字段为 `password_hash`
- 本次改动(最小闭环):
- 文件:`api/app/core/config.py`
- 新增配置 `user_password_column`(环境变量 `USER_PASSWORD_COLUMN`),可选值 `password` / `password_hash`,默认 `password_hash`
- 文件:`api/app/models/user.py`
- `User.password_hash` 改为基于 `settings.user_password_column` 动态映射,兼容两类历史库结构。
- 文件:`docker-compose.yml`
-`api` / `celery-worker` / `celery-beat` 注入 `USER_PASSWORD_COLUMN` 环境变量透传。
- 文件:`.env.example`
- 新增 `USER_PASSWORD_COLUMN=password_hash` 示例配置。
- 验证:
- `python3 -m py_compile api/app/core/config.py api/app/models/user.py api/app/services/seed_service.py` -> 通过。
- `rg -n "USER_PASSWORD_COLUMN|user_password_column" ...` 命中配置、模型、compose、env 示例,映射链路完整。
- 风险与影响:
- 影响面集中在 `User` 模型密码字段映射。
- 运行环境需确保 `USER_PASSWORD_COLUMN` 与目标数据库实际字段一致;若配置错误,启动阶段仍可能抛 `UndefinedColumn`