suhail
Initial deployment
7ffe51d
raw
history blame
1.55 kB
from sqlmodel import Session
from typing import Generator
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from src.core.database import get_session
from src.core.security import verify_jwt_token
from src.core.config import settings
security = HTTPBearer()
def get_db() -> Generator[Session, None, None]:
"""Get database session dependency."""
yield from get_session()
def get_current_user(
credentials: HTTPAuthorizationCredentials = Depends(security)
) -> int:
"""
Get current user ID from JWT token.
Extracts and verifies JWT from Authorization header.
Args:
credentials: HTTP Bearer credentials from Authorization header
Returns:
User ID extracted from validated token
Raises:
HTTPException: 401 if token is missing, invalid, or expired
"""
if not credentials:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Not authenticated",
headers={"WWW-Authenticate": "Bearer"}
)
token = credentials.credentials
# Verify token and extract payload
payload = verify_jwt_token(token, settings.BETTER_AUTH_SECRET)
# Extract user ID from 'sub' claim
user_id = payload.get("sub")
if not user_id:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Invalid token payload",
headers={"WWW-Authenticate": "Bearer"}
)
return int(user_id)