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.
|
|
|
|
|
"""
|
|
|
|
|
|
认证路由
|
|
|
|
|
|
"""
|
|
|
|
|
|
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="登出成功")
|