refresh tokens 0.1.2

This commit is contained in:
2026-07-23 20:51:26 +03:00
parent 7199387e6f
commit eab78b6679
8 changed files with 369 additions and 46 deletions
+30 -6
View File
@@ -1,20 +1,44 @@
from fastapi import APIRouter, Depends
from datetime import timedelta
from fastapi import APIRouter, Depends, Request, Response, Cookie
from fastapi.security import OAuth2PasswordRequestForm, OAuth2PasswordBearer
from src.models.configs_read.env import env_settings
from src.models.pydantic_models.model import UserOut
from src.service.auth.auth import auth
router=APIRouter(prefix="/protected")
oauth2_schema=OAuth2PasswordBearer(tokenUrl="/protected/token")
oauth2_schema=OAuth2PasswordBearer(tokenUrl="/protected/token", refreshUrl="/protected/refresh")
@router.post("/token")
async def get_access_token(form_data:OAuth2PasswordRequestForm=Depends())->dict:
return auth.create_token(form_data_email=form_data.username, form_data_password=form_data.password)
async def get_access_token(request: Request,response:Response, form_data:OAuth2PasswordRequestForm=Depends())->dict:
access_token, refresh_token=auth.login(form_data_email=form_data.username, form_data_password=form_data.password, request=request)
response.set_cookie(
key="refresh_token",
value=refresh_token,
httponly=True,
secure=True,
samesite="strict",
max_age=env_settings.REFRESH_TOKEN_EXPIRE_DAYS * 24 * 60 * 60
)
return {"access_token": access_token, "token_type": "bearer"}
def get_current_user(token:str = Depends(oauth2_schema)) -> UserOut:
@router.post("/refresh")
async def get_refresh_token(request:Request, refresh_token: str = Cookie())->dict:
return {"access_token":auth.refresh_token(refresh_token=refresh_token,request=request, expires_delta=timedelta(minutes=env_settings.ACCESS_TOKEN_EXPIRE_MINUTES)), "token_type": "bearer"}
async def get_current_user(token:str = Depends(oauth2_schema)) -> UserOut:
return UserOut.model_validate(auth.get_current_user(token))
@router.get("/logout")
async def logout(response:Response,refresh_token: str = Cookie(),current_user:UserOut=Depends(get_current_user))->bool:
response.delete_cookie("refresh_token")
return auth.logout(refresh_token)
@router.get("")
async def protected(current_user:UserOut=Depends(get_current_user))->dict:
return {"protected router": "Hello, this is a protected router"}