| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- """Authentication related API routes."""
- from typing import Any, Dict
- from fastapi import APIRouter, Depends, HTTPException, status
- from fastapi.security import HTTPAuthorizationCredentials
- from chatfast.services.auth import (
- AUTH_SCHEME,
- LoginRequest,
- RegisterRequest,
- UserInfo,
- create_auth_token,
- get_current_user,
- login_user,
- register_user,
- resolve_token,
- revoke_token,
- )
- router = APIRouter(prefix="/api/auth", tags=["auth"])
- @router.post("/register")
- async def api_register(payload: RegisterRequest) -> Dict[str, Any]:
- user = await register_user(payload.username, payload.password)
- token_data = await create_auth_token(user["id"])
- return {"user": user, "token": token_data["token"], "expires_at": token_data["expires_at"]}
- @router.post("/login")
- async def api_login(payload: LoginRequest) -> Dict[str, Any]:
- user = await login_user(payload.username, payload.password)
- token_data = await create_auth_token(user["id"])
- return {"user": user, "token": token_data["token"], "expires_at": token_data["expires_at"]}
- @router.post("/logout")
- async def api_logout(
- credentials: HTTPAuthorizationCredentials = Depends(AUTH_SCHEME),
- ) -> Dict[str, str]:
- if not credentials:
- raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="未登录")
- user = await resolve_token(credentials.credentials)
- if not user:
- raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="登录已失效")
- await revoke_token(credentials.credentials)
- return {"status": "ok"}
- @router.get("/me")
- async def api_me(current_user: UserInfo = Depends(get_current_user)) -> UserInfo:
- return current_user
|