refactor(auth): remove legacy RESTful user routes and migrate authentication to GraphQL context

- Rename get_current_user to get_current_user_id in auth/deps.py to clarify intent
- Remove legacy /me, /logout routes, and placeholder function from auth/__init__.py
- Remove dependency_overrides from app/main.py
- Update CustomContext to resolve and cache full User objects via db query
This commit is contained in:
2026-05-20 02:52:54 +08:00
parent d54aeaa61a
commit 9dfe000f2d
6 changed files with 34 additions and 95 deletions
+13 -4
View File
@@ -1,9 +1,9 @@
from app.models.user import User
from auth.deps import get_current_user
from auth.deps import get_current_user_id
from fastapi import Request
from strawberry.fastapi import BaseContext
from strawberry.dataloader import DataLoader
from typing import List
from typing import List, Optional
from collections import defaultdict
from app.db import SessionLocal
from app.models import WorkspaceMember
@@ -31,13 +31,22 @@ class CustomContext(BaseContext):
super().__init__(request)
self.db = SessionLocal()
self.request = request
self._current_user: Optional[User] = None
self.members_loader = DataLoader(load_fn=load_members_by_workspace_ids)
async def get_current_user(self) -> User | None:
# 复用现有的 auth 逻辑
"""在 Context 级别负责把 user_id 变成真正的数据库 User 对象"""
if self._current_user is not None:
return self._current_user
try:
return await get_current_user(self.request)
# 借用 auth 包的纯工具解出 ID
user_id = get_current_user_id(self.request)
# 在 Context 的数据库连接中查询完整用户
user = self.db.query(User).filter(User.id == user_id).first()
self._current_user = user
return user
except Exception:
return None
+2 -18
View File
@@ -5,7 +5,7 @@ from strawberry import Schema
from strawberry.fastapi import GraphQLRouter
from dotenv import load_dotenv
from auth import router as auth_router, get_user_by_id, get_current_user
from auth import router as auth_router
from app.db import engine, SessionLocal
from app.models import Base, User
@@ -46,23 +46,7 @@ graphql_router = GraphQLRouter(schema, context_getter=get_context)
app.include_router(auth_router) # 保留现有的 auth 路由供 Google OAuth 回调使用
app.include_router(graphql_router, prefix="/graphql") # 挂载 GraphQL 终点,前端以后只需要请求 /graphql
def override_get_user_by_id(user_id: str = Depends(get_current_user)):
db = SessionLocal()
try:
user = db.query(User).filter(User.id == user_id).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
return {
"email": user.email,
"name": user.name,
"avatar": get_image_url(user.avatar),
}
finally:
db.close()
app.dependency_overrides[get_user_by_id] = override_get_user_by_id
# test code
# 打印路由测试
for route in app.routes:
methods = getattr(route, "methods", "N/A")
print(f"Path: {route.path} | Name: {route.name} | Methods: {methods}")