04f7ff0317
- Backend: guest UUID format fix, /auth/me guest branch, UUID validation in deps.py, CORS config fix - Frontend: switch to native tabbar (custom: false), cleanup App.vue, redesign quick-actions with colored icons, conditional wechat login, proxy API requests via Vite
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
from fastapi import HTTPException, Depends, Header
|
|
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
|
|
from app.core.security import decode_token
|
|
from typing import Optional
|
|
import uuid
|
|
|
|
security = HTTPBearer(auto_error=False)
|
|
|
|
|
|
async def get_current_user_id(
|
|
authorization: Optional[str] = Header(None, alias="Authorization"),
|
|
cred: Optional[HTTPAuthorizationCredentials] = Depends(security),
|
|
) -> str:
|
|
token = None
|
|
if cred:
|
|
token = cred.credentials
|
|
elif authorization and authorization.startswith("Bearer "):
|
|
token = authorization[7:]
|
|
|
|
if not token:
|
|
raise HTTPException(status_code=401, detail="Missing or invalid token")
|
|
|
|
payload = decode_token(token)
|
|
if not payload:
|
|
raise HTTPException(status_code=401, detail="Invalid or expired token")
|
|
|
|
user_id = payload.get("sub")
|
|
if not user_id:
|
|
raise HTTPException(status_code=401, detail="Invalid token payload")
|
|
|
|
try:
|
|
uuid.UUID(user_id)
|
|
except (ValueError, AttributeError):
|
|
raise HTTPException(status_code=401, detail="Token expired, please login again")
|
|
|
|
return user_id
|
|
|
|
|
|
async def get_current_user(
|
|
cred: HTTPAuthorizationCredentials = Depends(security),
|
|
) -> dict:
|
|
if not cred:
|
|
raise HTTPException(status_code=401, detail="Missing or invalid token")
|
|
|
|
payload = decode_token(cred.credentials)
|
|
if not payload:
|
|
raise HTTPException(status_code=401, detail="Invalid or expired token")
|
|
|
|
return {
|
|
"id": payload.get("sub"),
|
|
"tier": payload.get("tier", "free"),
|
|
"role": payload.get("role", "user"),
|
|
}
|