"""注册 / 登录路由。""" from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from ..database import get_db from ..models import User from ..schemas import RegisterIn, LoginIn, TokenOut from ..security import hash_password, verify_password, create_access_token router = APIRouter(prefix="/api/auth", tags=["auth"]) @router.post("/register", response_model=TokenOut) def register(body: RegisterIn, db: Session = Depends(get_db)): if db.query(User).filter(User.username == body.username).first(): raise HTTPException(status.HTTP_409_CONFLICT, "用户名已存在") user = User(username=body.username, password_hash=hash_password(body.password)) db.add(user) db.commit() db.refresh(user) token = create_access_token(user.id) return TokenOut(access_token=token, username=user.username) @router.post("/login", response_model=TokenOut) def login(body: LoginIn, db: Session = Depends(get_db)): user = db.query(User).filter(User.username == body.username).first() if not user or not verify_password(body.password, user.password_hash): raise HTTPException(status.HTTP_401_UNAUTHORIZED, "用户名或密码错误") token = create_access_token(user.id) return TokenOut(access_token=token, username=user.username)