Skip to content

Commit e5946f9

Browse files
committed
Make password auth optional based on environment variable
1 parent 1001e0f commit e5946f9

File tree

2 files changed

+20
-24
lines changed

2 files changed

+20
-24
lines changed

src/app/api/v1/login.py

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from datetime import timedelta
21
from typing import Annotated
32

43
from fastapi import APIRouter, Depends, Request, Response
@@ -10,7 +9,6 @@
109
from ...core.exceptions.http_exceptions import UnauthorizedException
1110
from ...core.schemas import Token
1211
from ...core.security import (
13-
ACCESS_TOKEN_EXPIRE_MINUTES,
1412
TokenType,
1513
authenticate_user,
1614
create_access_token,
@@ -21,27 +19,25 @@
2119
router = APIRouter(tags=["login"])
2220

2321

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"}
4541

4642

4743
@router.post("/refresh")

src/app/core/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class CORSSettings(BaseSettings):
142142

143143

144144
class AuthSettings(BaseSettings):
145-
ENABLE_LOCAL_AUTH: bool = True
145+
ENABLE_PASSWORD_AUTH: bool = True
146146
GOOGLE_CLIENT_ID: str | None = None
147147
GOOGLE_CLIENT_SECRET: str | None = None
148148
MICROSOFT_CLIENT_ID: str | None = None

0 commit comments

Comments
 (0)