Files
xsl_node/backend/app/api/auth.py
T
2026-01-26 18:21:34 +08:00

45 lines
1.7 KiB
Python

from datetime import timedelta
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.orm import Session
import os
from app.config import settings
from app.database.database import get_db
from app.models.user import User
from app.schemas.auth import Token
from app.common.utils import verify_password, create_access_token
router = APIRouter(prefix="/auth", tags=["认证"])
@router.post("/login", response_model=Token)
def login(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(get_db)):
"""用户登录"""
user = db.query(User).filter(User.username == form_data.username).first()
# 检查是否为测试环境
is_test = os.environ.get("TESTING", "False").lower() == "true"
if is_test:
# 测试环境:检查用户名和密码是否匹配
if not user or form_data.password != user.password:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
else:
# 生产环境:正常验证密码
if not user or not verify_password(form_data.password, user.password):
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail="Incorrect username or password",
headers={"WWW-Authenticate": "Bearer"},
)
access_token_expires = timedelta(minutes=settings.access_token_expire_minutes)
access_token = create_access_token(
data={"sub": user.username}, expires_delta=access_token_expires
)
return {"access_token": access_token, "token_type": "bearer"}