Files
2026-06-08 15:05:57 +08:00

34 lines
1.3 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy import or_, select
from sqlalchemy.ext.asyncio import AsyncSession
from app.api.deps import get_current_user
from app.core.database import get_db
from app.core.security import create_access_token, hash_password, verify_password
from app.models import User
from app.schemas.core import LoginIn, TokenOut, UserCreate, UserOut, UserUpdate
from app.schemas.common import Page
router = APIRouter(prefix="/auth", tags=["认证"])
@router.post("/login", response_model=TokenOut)
async def login(payload: LoginIn, db: AsyncSession = Depends(get_db)):
result = await db.execute(
select(User).where(
or_(User.username == payload.username, User.email == payload.username),
User.is_deleted == False,
)
)
user = result.scalar_one_or_none()
if not user or not verify_password(payload.password, user.password_hash):
raise HTTPException(status_code=400, detail="用户名或密码错误")
if user.status != "enabled":
raise HTTPException(status_code=403, detail="用户已禁用")
return TokenOut(access_token=create_access_token(user.id, {"username": user.username}))
@router.get("/me", response_model=UserOut)
async def me(user: User = Depends(get_current_user)):
return user