本系统已成功集成 JWT(JSON Web Token)认证体系,提供完整的用户注册、登录、令牌刷新和基于角色的访问控制功能。
✅ 用户注册和登录
✅ JWT 令牌管理
✅ 中间件认证
✅ 基于角色的访问控制
✅ 自动用户关联
# 复制环境变量模板
cp .env.example .env
# 生成安全的 JWT 密钥
python -c "import secrets; print(secrets.token_urlsafe(32))"
# 编辑 .env 文件,设置 JWT_SECRET_KEY
python main.py
服务器将在 http://localhost:8000 启动
运行测试脚本:
.\test_auth_flow.ps1
或手动测试:
# 注册用户
curl -X POST "http://localhost:8000/api/auth/register" \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "email": "test@example.com", "password": "password123"}'
# 登录
curl -X POST "http://localhost:8000/api/auth/login" \
-H "Content-Type: application/json" \
-d '{"username": "testuser", "password": "password123"}'
# 使用 token 访问受保护端点
curl -X GET "http://localhost:8000/api/auth/me" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
| 端点 | 方法 | 描述 |
|---|---|---|
/api/auth/register |
POST | 用户注册 |
/api/auth/login |
POST | 用户登录 |
/api/auth/refresh |
POST | 刷新令牌 |
| 端点 | 方法 | 描述 |
|---|---|---|
/api/auth/me |
GET | 获取当前用户信息 |
所有 /api/projects/*、/api/tasks/*、/api/annotations/* 端点都需要认证。
| 端点 | 方法 | 描述 | 角色要求 |
|---|---|---|---|
DELETE /api/projects/{id} |
DELETE | 删除项目 | admin |
DELETE /api/tasks/{id} |
DELETE | 删除任务 | admin |
assigned_to,自动分配给当前用户原因:
解决方案:
Authorization: Bearer <token> header原因:
解决方案:
注册/登录
↓
获得 Access Token (15分钟) + Refresh Token (7天)
↓
使用 Access Token 访问 API
↓
Access Token 过期
↓
使用 Refresh Token 获取新的 Access Token
↓
继续使用新的 Access Token
↓
Refresh Token 过期
↓
需要重新登录
| 字段 | 类型 | 描述 |
|---|---|---|
| id | TEXT | 用户唯一标识 |
| username | TEXT | 用户名(唯一) |
| TEXT | 邮箱(唯一) | |
| password_hash | TEXT | 密码哈希 |
| role | TEXT | 用户角色 |
| oauth_provider | TEXT | OAuth 提供商(预留) |
| oauth_id | TEXT | OAuth ID(预留) |
| created_at | TIMESTAMP | 创建时间 |
所有测试已通过 ✅
参考 .kiro/specs/jwt-authentication/tasks.md 中的 Task 14,包含:
解决方案:这是正常的开发环境提示。生产环境请在 .env 文件中设置 JWT_SECRET_KEY。
解决方案:
解决方案:这是设计行为。普通用户只能访问自己的标注,管理员可以访问所有标注。
如有问题或建议,请联系项目维护者。
文档版本: 1.0
最后更新: 2024-01-22
状态: ✅ 生产就绪