f3e5640290
修复 users.email 字段 NOT NULL 约束与前端可选表单不一致的问题。 ## 改动内容 1. 添加数据库兼容性检查函数 `_ensure_user_email_nullable()` - 检测 users.email 字段是否有 NOT NULL 约束 - 如果存在约束则自动移除,使字段变为可选 - 仅对 PostgreSQL 数据库生效 2. 在 `init_db()` 中调用该函数 - 确保应用启动时自动应用迁移 - 与现有兼容性检查函数保持一致的模式 3. 添加单元测试 `test_user_email_optional.py` - 验证可以创建不带 email 的用户 - 验证可以创建带 email 的用户 - 验证直接使用 User 模型创建用户时 email 可为 None ## 修复方案 采用 Issue 中推荐的方案 1(数据库层面修复): - 将 email 字段改为可选,与前端表单语义保持一致 - 用户可以选择不填写邮箱 - email 字段保持 UNIQUE 约束,但允许 NULL 值 ## 相关文件 - api/app/core/database.py:523-546 - 新增兼容性检查函数 - api/app/core/database.py:586 - 在 init_db() 中调用 - api/tests/test_user_email_optional.py - 新增单元测试 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
API Service
FastAPI 后端服务,包含用户认证和 RBAC 权限控制。
核心能力
- JWT Access Token(默认 8 小时)
- Refresh Session(HttpOnly Cookie,默认 30 天,刷新轮换)
- RBAC(用户-角色-权限)
- 用户管理接口(需
user.manage)
本地开发
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r api/requirements.txt
python -m uvicorn api.app.main:app --reload --host 0.0.0.0 --port 8000
主要接口
GET /healthGET /api/v1/pingPOST /api/v1/auth/registerPOST /api/v1/auth/loginPOST /api/v1/auth/refreshPOST /api/v1/auth/logoutGET /api/v1/auth/meGET /api/v1/users