55from jose import jwt
66from pydantic import ValidationError
77from sqlalchemy import select
8- from sqlalchemy .orm import Session
8+ from sqlalchemy .ext . asyncio import AsyncSession
99
1010from app import schemas
1111from app .api import deps
1717
1818
1919@router .post ("/access-token" , response_model = schemas .Token )
20- def login_access_token (
21- session : Session = Depends (deps .get_session ),
20+ async def login_access_token (
21+ session : AsyncSession = Depends (deps .get_session ),
2222 form_data : OAuth2PasswordRequestForm = Depends (),
2323):
2424 """
2525 OAuth2 compatible token, get an access token for future requests using username and password
2626 """
27-
28- user : Optional [User ] = (
29- session .execute (select (User ).where (User .email == form_data .username ))
30- .scalars ()
31- .first ()
32- )
33-
27+ result = await session .execute (select (User ).where (User .email == form_data .username ))
28+ user : Optional [User ] = result .scalars ().first ()
3429 if user is None :
3530 raise HTTPException (status_code = 400 , detail = "Incorrect email or password" )
3631
@@ -49,15 +44,17 @@ def login_access_token(
4944
5045
5146@router .post ("/test-token" , response_model = schemas .User )
52- def test_token (current_user : User = Depends (deps .get_current_user )):
47+ async def test_token (current_user : User = Depends (deps .get_current_user )):
5348 """
5449 Test access token
5550 """
5651 return current_user
5752
5853
5954@router .post ("/refresh-token" , response_model = schemas .Token )
60- def refresh_token (refresh_token : str , session : Session = Depends (deps .get_session )):
55+ async def refresh_token (
56+ refresh_token : str , session : AsyncSession = Depends (deps .get_session )
57+ ):
6158 """
6259 OAuth2 compatible token, get an access token for future requests using refresh token
6360 """
@@ -76,13 +73,12 @@ def refresh_token(refresh_token: str, session: Session = Depends(deps.get_sessio
7673 status_code = status .HTTP_403_FORBIDDEN ,
7774 detail = "Could not validate credentials" ,
7875 )
79-
80- user : Optional [User ] = (
81- session .execute (select (User ).where (User .id == token_data .sub )).scalars ().first ()
82- )
76+ result = await session .execute (select (User ).where (User .id == token_data .sub ))
77+ user : Optional [User ] = result .scalars ().first ()
8378
8479 if user is None :
8580 raise HTTPException (status_code = 404 , detail = "User not found" )
81+
8682 access_token , expire_at = security .create_access_token (user .id )
8783 refresh_token , refresh_expire_at = security .create_refresh_token (user .id )
8884 return {
0 commit comments