feat: add login endpoint functionality (auto-linted)

This commit is contained in:
Backend IM Bot 2025-05-08 23:41:52 +00:00
parent c59e29870c
commit e3e4ad6ea1
2 changed files with 14 additions and 33 deletions

View File

@ -1,37 +1,14 @@
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel from typing import Optional
from datetime import timedelta from schemas.user import UserLogin
from core.database import get_db from helpers.user_helpers import authenticate_user
from sqlalchemy.orm import Session from db import get_db, Session
from core.auth import verify_password, create_access_token
from models.user import User
router = APIRouter() router = APIRouter()
class UserAuth(BaseModel): @router.post("/login", status_code=200, response_model=Optional[dict])
username: str async def login(user_data: UserLogin, db: Session = Depends(get_db)):
password: str user = authenticate_user(db, user_data)
if not user:
@router.post("/login") raise HTTPException(status_code=401, detail="Invalid credentials")
async def login( return user
user_data: UserAuth,
db: Session = Depends(get_db)
):
"""User authentication endpoint"""
user = db.query(User).filter(User.username == user_data.username).first()
if not user or not verify_password(user_data.password, user.hashed_password):
raise HTTPException(status_code=400, detail="Invalid credentials")
# Generate token with expiration
access_token = create_access_token(
data={"sub": user.id},
expires_delta=timedelta(hours=1)
)
return {
"access_token": access_token,
"token_type": "bearer",
"user_id": user.id,
"username": user.username
}

View File

@ -7,3 +7,7 @@ sqlalchemy>=1.4.0
python-dotenv>=0.19.0 python-dotenv>=0.19.0
bcrypt>=3.2.0 bcrypt>=3.2.0
alembic>=1.13.1 alembic>=1.13.1
db
jose
passlib
pydantic