You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
认证路由
"""
from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import HTTPBearer
from sqlalchemy.orm import Session
from app.db.session import get_db
from app.schemas.auth import UserLogin, TokenResponse, UserInfo
from app.schemas.base import ResponseModel
from app.services.auth_service import AuthService
from app.core.security import get_current_user
from app.models.user import User
router = APIRouter()
security = HTTPBearer()
@router.post("/login", response_model=ResponseModel[TokenResponse])
async def login(login_data: UserLogin, db: Session = Depends(get_db)):
"""
用户登录
- **username**: 用户名
- **password**: 密码
"""
user = AuthService.authenticate_user(db, login_data.username, login_data.password)
token_data = AuthService.create_user_token(user)
return ResponseModel(data=TokenResponse(**token_data))
@router.get("/me", response_model=ResponseModel[UserInfo])
async def get_me(current_user: User = Depends(get_current_user)):
"""获取当前用户信息"""
return ResponseModel(data=UserInfo.model_validate(current_user))
@router.post("/logout", response_model=ResponseModel)
async def logout():
"""用户登出前端清除token即可"""
return ResponseModel(message="登出成功")