windup_user
├── id BIGINT PK
├── email VARCHAR(255) UNIQUE
├── password_hash VARCHAR(255)
├── nickname VARCHAR(255)
├── email_verified_at TIMESTAMPTZ
├── status SMALLINT (0=正常, 1=封禁)
├── last_login_at TIMESTAMPTZ
├── create_at TIMESTAMPTZ
└── update_at TIMESTAMPTZ
背景
Windup 后端此前没有用户体系,所有 API 无鉴权,任何人可操作任何数据。本次在
feat/backend-dev分支实现了完整的用户认证模块,并修复了由此暴露的一系列权限与基础设施问题。实现内容
1. 用户注册与登录
POST /auth/register)POST /auth/login)POST /auth/login-by-code)POST /auth/refresh)POST /auth/logout)2. JWT 鉴权中间件
AuthMiddleware(BaseHTTPMiddleware)统一拦截请求/auth/*、/docs、/health等)request.state.current_user(id、email)3. 邮箱验证码
email_provider抽象层,可对接任意 SMTP 服务4. 接口限流中间件
RateLimitMiddleware基于 Redis 滑动窗口安全修复(本次同步完成)
BizException跳过ExceptionMiddleware,返回 500 而非业务码JSONResponseuser_id,可越权操作user_id,加归属校验project_id无归属校验create_character漏传name参数,名称丢失name=body.nameredis:7-alpine服务 +REDIS_URLinit.sql缺windup_project唯一约束,生产可插入重名UNIQUE (user_id, project_name)数据模型
测试覆盖
test_user_service.py:22 个用例,覆盖注册/登录/验证码/登出/刷新/改密/限流test_project_api.py:9 个用例,覆盖 CRUD + 权限归属test_character_api.py:3 个用例,覆盖命名持久化关联
feat: backend devfeat(auth): split auth session module