1515from fastapi_2fa .core .config import settings
1616from fastapi_2fa .core .enums import DeviceTypeEnum
1717from fastapi_2fa .core .utils import send_backup_tokens
18+ from fastapi_2fa .core .two_factor_auth import verify_token
1819from fastapi_2fa .crud .device import device_crud
1920from fastapi_2fa .crud .users import user_crud
2021from fastapi_2fa .models .users import User
21- from fastapi_2fa .schemas .token_schema import TokenPayload , TokenSchema
22+ from fastapi_2fa .schemas .token_schema import TokenPayload , TokenSchema , PreTfaTokenSchema
2223from fastapi_2fa .schemas .user_schema import UserCreate , UserOut
2324
2425auth_router = APIRouter ()
@@ -75,7 +76,7 @@ async def signup(
7576 "/login" ,
7677 summary = "Create access and refresh tokens for user" ,
7778 status_code = status .HTTP_200_OK ,
78- response_model = TokenSchema ,
79+ response_model = TokenSchema | PreTfaTokenSchema ,
7980)
8081async def login (
8182 response : Response ,
@@ -96,7 +97,7 @@ async def login(
9697 # verify 2 factor authentication
9798 if user_crud .is_tfa_enabled (user = user ):
9899 response .status_code = status .HTTP_202_ACCEPTED
99- return TokenSchema (
100+ return PreTfaTokenSchema (
100101 access_token = security .create_pre_tfa_token (user .id ),
101102 refresh_token = None ,
102103 )
@@ -110,16 +111,24 @@ async def login(
110111
111112@auth_router .post (
112113 "/login/tfa" ,
113- summary = "Verify two factor authenticazion token" ,
114- response_model = UserOut ,
114+ summary = "Verify two factor authentication token" ,
115+ response_model = TokenSchema ,
115116)
116117async def login_tfa (
117118 tfa_token : str ,
118119 db : Session = Depends (get_db ),
119120 user : User = Depends (get_authenticated_user_pre_tfa ),
120121) -> Any :
121- print (f"{ tfa_token } " )
122- return user
122+ if verify_token (user = user , token = tfa_token ):
123+ return TokenSchema (
124+ access_token = security .create_jwt_access_token (user .id ),
125+ refresh_token = security .create_jwt_refresh_token (user .id ),
126+ )
127+
128+ raise HTTPException (
129+ status_code = status .HTTP_403_FORBIDDEN ,
130+ detail = "TOTP token mismatch"
131+ )
123132
124133
125134@auth_router .post (
0 commit comments