|
1 | | -from datetime import timedelta |
2 | 1 | from typing import Annotated |
3 | 2 |
|
4 | 3 | from fastapi import APIRouter, Depends, Request, Response |
|
10 | 9 | from ...core.exceptions.http_exceptions import UnauthorizedException |
11 | 10 | from ...core.schemas import Token |
12 | 11 | from ...core.security import ( |
13 | | - ACCESS_TOKEN_EXPIRE_MINUTES, |
14 | 12 | TokenType, |
15 | 13 | authenticate_user, |
16 | 14 | create_access_token, |
|
21 | 19 | router = APIRouter(tags=["login"]) |
22 | 20 |
|
23 | 21 |
|
24 | | -@router.post("/login", response_model=Token) |
25 | | -async def login_for_access_token( |
26 | | - response: Response, |
27 | | - form_data: Annotated[OAuth2PasswordRequestForm, Depends()], |
28 | | - db: Annotated[AsyncSession, Depends(async_get_db)], |
29 | | -) -> dict[str, str]: |
30 | | - user = await authenticate_user(username_or_email=form_data.username, password=form_data.password, db=db) |
31 | | - if not user: |
32 | | - raise UnauthorizedException("Wrong username, email or password.") |
33 | | - |
34 | | - access_token_expires = timedelta(minutes=ACCESS_TOKEN_EXPIRE_MINUTES) |
35 | | - access_token = await create_access_token(data={"sub": user["username"]}, expires_delta=access_token_expires) |
36 | | - |
37 | | - refresh_token = await create_refresh_token(data={"sub": user["username"]}) |
38 | | - max_age = settings.REFRESH_TOKEN_EXPIRE_DAYS * 24 * 60 * 60 |
39 | | - |
40 | | - response.set_cookie( |
41 | | - key="refresh_token", value=refresh_token, httponly=True, secure=True, samesite="lax", max_age=max_age |
42 | | - ) |
43 | | - |
44 | | - return {"access_token": access_token, "token_type": "bearer"} |
| 22 | +if settings.ENABLE_PASSWORD_AUTH: |
| 23 | + |
| 24 | + @router.post("/login", response_model=Token) |
| 25 | + async def login_with_password( |
| 26 | + response: Response, |
| 27 | + form_data: Annotated[OAuth2PasswordRequestForm, Depends()], |
| 28 | + db: Annotated[AsyncSession, Depends(async_get_db)], |
| 29 | + ) -> dict[str, str]: |
| 30 | + user = await authenticate_user(username_or_email=form_data.username, password=form_data.password, db=db) |
| 31 | + if not user: |
| 32 | + raise UnauthorizedException("Wrong username, email or password.") |
| 33 | + |
| 34 | + access_token = await create_access_token(data={"sub": user["username"]}) |
| 35 | + refresh_token = await create_refresh_token(data={"sub": user["username"]}) |
| 36 | + max_age = settings.REFRESH_TOKEN_EXPIRE_DAYS * 24 * 60 * 60 |
| 37 | + response.set_cookie( |
| 38 | + key="refresh_token", value=refresh_token, httponly=True, secure=True, samesite="lax", max_age=max_age |
| 39 | + ) |
| 40 | + return {"access_token": access_token, "token_type": "bearer"} |
45 | 41 |
|
46 | 42 |
|
47 | 43 | @router.post("/refresh") |
|
0 commit comments