2
0
Просмотр исходного кода

feat(auth): 添加用户注册 API 代理端点

- 新增 /api/auth/register 端点代理用户注册请求
- 支持邮箱、用户名、密码注册
- 集成 Novel Platform 用户注册 API
- 完善用户认证功能体系

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Claude AI 13 часов назад
Родитель
Сommit
95c27f6848
1 измененных файлов с 72 добавлено и 0 удалено
  1. 72 0
      backend/app_fastapi.py

+ 72 - 0
backend/app_fastapi.py

@@ -623,6 +623,78 @@ async def admin_login(request: Request):
         raise HTTPException(status_code=500, detail=str(e))
         raise HTTPException(status_code=500, detail=str(e))
 
 
 
 
+@app.post("/api/auth/register")
+async def register(request: Request):
+    """
+    Novel Platform 用户注册
+    代理到实际的注册端点
+    """
+    try:
+        data = await request.json()
+        email = data.get('email')
+        username = data.get('username')
+        password = data.get('password')
+
+        if not email or not username or not password:
+            raise HTTPException(status_code=400, detail="Email, username and password are required")
+
+        # 查找用户 MCP 服务器
+        target_server = MCP_SERVERS.get('novel-platform-user')
+        if not target_server:
+            # 如果没有专门的用户服务器,尝试找到任何需要 JWT 认证的服务器
+            for server_id, config in MCP_SERVERS.items():
+                if config.get('auth_type') == 'jwt' and 'base_url' in config:
+                    if 'user' in server_id:
+                        target_server = config
+                        break
+                    elif target_server is None:
+                        target_server = config
+
+        if not target_server:
+            raise HTTPException(status_code=400, detail="No JWT-authenticated server configured")
+
+        # 构建注册 URL
+        base_url = target_server.get('base_url', '')
+        register_url = f"{base_url}/api/v1/auth/register"
+
+        # 调用实际的注册接口(异步版本)
+        async with httpx.AsyncClient(timeout=30.0) as http_client:
+            response = await http_client.post(
+                register_url,
+                json={"email": email, "username": username, "password": password}
+            )
+
+        if response.status_code in (200, 201):
+            result = response.json()
+            # Novel Platform API 返回用户对象
+            return {
+                "success": True,
+                "message": "注册成功",
+                "user": {
+                    "id": result.get("id"),
+                    "email": result.get("email"),
+                    "username": result.get("username"),
+                    "role": result.get("role")
+                }
+            }
+        else:
+            # 尝试解析错误响应
+            try:
+                error_detail = response.json()
+                error_msg = error_detail.get("detail", response.text)
+            except:
+                error_msg = response.text
+            raise HTTPException(
+                status_code=response.status_code,
+                detail=error_msg
+            )
+
+    except HTTPException:
+        raise
+    except Exception as e:
+        raise HTTPException(status_code=500, detail=str(e))
+
+
 @app.post("/api/auth/logout")
 @app.post("/api/auth/logout")
 async def logout(request: Request):
 async def logout(request: Request):
     """登出并清除会话"""
     """登出并清除会话"""