feat: Refactor cookie handling to use utility functions for setting access and refresh tokens
All checks were successful
Backend CI / lint (push) Successful in 9m30s
Backend CI / test (push) Successful in 3m31s

This commit is contained in:
JSC
2025-08-08 10:06:45 +02:00
parent b4f0f54516
commit 69544b6bb8
2 changed files with 79 additions and 85 deletions

View File

@@ -27,6 +27,7 @@ from app.schemas.auth import (
from app.services.auth import AuthService
from app.services.oauth import OAuthService
from app.utils.auth import JWTUtils, TokenUtils
from app.utils.cookies import set_access_token_cookie, set_auth_cookies
router = APIRouter(prefix="/auth", tags=["authentication"])
logger = get_logger(__name__)
@@ -54,26 +55,11 @@ async def register(
refresh_token = await auth_service.create_and_store_refresh_token(user)
# Set HTTP-only cookies for both tokens
response.set_cookie(
key="access_token",
value=auth_response.token.access_token,
max_age=auth_response.token.expires_in,
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
)
response.set_cookie(
key="refresh_token",
value=refresh_token,
max_age=settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS
* 24
* 60
* 60, # Convert days to seconds
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
set_auth_cookies(
response=response,
access_token=auth_response.token.access_token,
refresh_token=refresh_token,
expires_in=auth_response.token.expires_in,
)
except HTTPException:
@@ -103,26 +89,11 @@ async def login(
refresh_token = await auth_service.create_and_store_refresh_token(user)
# Set HTTP-only cookies for both tokens
response.set_cookie(
key="access_token",
value=auth_response.token.access_token,
max_age=auth_response.token.expires_in,
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
)
response.set_cookie(
key="refresh_token",
value=refresh_token,
max_age=settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS
* 24
* 60
* 60, # Convert days to seconds
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
set_auth_cookies(
response=response,
access_token=auth_response.token.access_token,
refresh_token=refresh_token,
expires_in=auth_response.token.expires_in,
)
except HTTPException:
@@ -171,14 +142,10 @@ async def refresh_token(
token_response = await auth_service.refresh_access_token(refresh_token)
# Set new access token cookie
response.set_cookie(
key="access_token",
value=token_response.access_token,
max_age=token_response.expires_in,
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
set_access_token_cookie(
response=response,
access_token=token_response.access_token,
expires_in=token_response.expires_in,
)
except HTTPException:
@@ -307,24 +274,11 @@ async def oauth_callback(
# Set HTTP-only cookies for both tokens (not used due to cross-port issues)
# These cookies are kept for potential future same-origin scenarios
response.set_cookie(
key="access_token",
value=auth_response.token.access_token,
max_age=auth_response.token.expires_in,
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
path="/", # Ensure cookie is available for all paths
)
response.set_cookie(
key="refresh_token",
value=refresh_token,
max_age=settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS * 24 * 60 * 60,
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost", # Allow cookie across localhost ports
set_auth_cookies(
response=response,
access_token=auth_response.token.access_token,
refresh_token=refresh_token,
expires_in=auth_response.token.expires_in,
path="/", # Ensure cookie is available for all paths
)
@@ -410,24 +364,11 @@ async def exchange_oauth_token(
)
# Set the proper auth cookies
response.set_cookie(
key="access_token",
value=token_data["access_token"],
max_age=token_data["expires_in"],
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost",
path="/",
)
response.set_cookie(
key="refresh_token",
value=token_data["refresh_token"],
max_age=settings.JWT_REFRESH_TOKEN_EXPIRE_DAYS * 24 * 60 * 60,
httponly=True,
secure=settings.COOKIE_SECURE,
samesite=settings.COOKIE_SAMESITE,
domain="localhost",
set_auth_cookies(
response=response,
access_token=token_data["access_token"],
refresh_token=token_data["refresh_token"],
expires_in=token_data["expires_in"],
path="/",
)