feat(routes): 迁移注册/找回密码/卡密/验证码端点

- web/routers/register.py:auth/send_code、auth/register、auth/trial、
  auth/redeem、auth/forgot_password
- 同步调用(SQLite 事务/SMTP/PBKDF2)走 asyncio.to_thread;发码 IP 限流复用
  auth_routes._SEND_CODE_IP(跨栈共享计数)
- 注册成功路径签发会话 Cookie;管理员找回密码仍防枚举拦截

测试:tests/test_register.py 6 项沙箱用例(播种验证码绕 SMTP)——
协议门槛、注册成功建号+赠送+会话可用、验证码错误、找回重置后可登录、
管理员找回被拦、卡密充值。
全套:pytest 62/62;ruff All checks passed;pyright 0 errors;冒烟 10/10。
This commit is contained in:
snowy-yang committed 2026-09-26 10:00:39 +08:00
1 parent 22f4d77abd
commit 915358405c
3 files changed
+365

No files matched your search

+2
View File
@@ -31,6 +31,7 @@ from web.routers import delivery as delivery_router
from web.routers import index as index_router
from web.routers import music as music_router
from web.routers import podcast as podcast_router
from web.routers import register as register_router
from web.routers import site as site_router
from web.routers import stream as stream_router
from web.routers import system as system_router
@@ -95,6 +96,7 @@ def create_app(serve_flask_fallback: bool = False) -> FastAPI:
app.include_router(auth_router.router, prefix='/api/v1', tags=['auth'])
app.include_router(user_router.router, prefix='/api/v1', tags=['user'])
app.include_router(admin_router.router, prefix='/api/v1', tags=['admin'])
app.include_router(register_router.router, prefix='/api/v1', tags=['auth'])
# 首页与静态资源(迁移完成形态;fallback 模式下同路径也能由 Flask 提供)
app.include_router(index_router.router, tags=['index'])