Browse Source

Fix login endpoint: use OAuth2PasswordRequestForm

Changed from custom LoginRequest schema to FastAPI's
OAuth2PasswordRequestForm for standard OAuth2 compatibility.

This accepts application/x-www-form-urlencoded with
username and password fields (username contains email).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
root 1 month ago
parent
commit
532cf30add
1 changed files with 4 additions and 4 deletions
  1. 4 4
      backend/app/api/v1/auth.py

+ 4 - 4
backend/app/api/v1/auth.py

@@ -5,6 +5,7 @@ Authentication endpoints: register, login, refresh, logout.
 from typing import Annotated
 from typing import Annotated
 
 
 from fastapi import APIRouter, Depends
 from fastapi import APIRouter, Depends
+from fastapi.security import OAuth2PasswordRequestForm
 from sqlalchemy.ext.asyncio import AsyncSession
 from sqlalchemy.ext.asyncio import AsyncSession
 
 
 from app.api.deps import get_current_user
 from app.api.deps import get_current_user
@@ -12,7 +13,6 @@ from app.core.database import get_db
 from app.models.user import User
 from app.models.user import User
 from app.schemas.auth import (
 from app.schemas.auth import (
     AuthResponse,
     AuthResponse,
-    LoginRequest,
     LogoutRequest,
     LogoutRequest,
     RefreshRequest,
     RefreshRequest,
     RegisterRequest,
     RegisterRequest,
@@ -46,7 +46,7 @@ async def register(
 
 
 @router.post("/login", response_model=AuthResponse)
 @router.post("/login", response_model=AuthResponse)
 async def login(
 async def login(
-    data: LoginRequest,
+    form_data: Annotated[OAuth2PasswordRequestForm, Depends()],
     db: Annotated[AsyncSession, Depends(get_db)],
     db: Annotated[AsyncSession, Depends(get_db)],
 ):
 ):
     """
     """
@@ -60,8 +60,8 @@ async def login(
     """
     """
     return await auth_service.login_user(
     return await auth_service.login_user(
         db=db,
         db=db,
-        email=data.email,
-        password=data.password,
+        email=form_data.username,
+        password=form_data.password,
     )
     )