from fastapi import APIRouter, Depends, status from fastapi_users import models from fastapi_users.manager import BaseUserManager from app.schemas.user import UserCreate, UserRead, UserUpdate from app.services.user_service import auth_backend, fastapi_users router = APIRouter() @router.delete( "/users/me", status_code=status.HTTP_204_NO_CONTENT, tags=["users"], summary="Delete current user", response_description="The user has been successfully deleted.", ) async def delete_me( user: models.UserProtocol = Depends(fastapi_users.current_user(active=True)), user_manager: BaseUserManager = Depends(fastapi_users.get_user_manager), ): """ Delete the currently authenticated user. """ await user_manager.delete(user) # Keep existing paths as-is under /auth/* and /users/* from fastapi import Request, Response from app.core.security import revoke_token, extract_bearer_token @router.post( "/auth/jwt/logout", status_code=status.HTTP_204_NO_CONTENT, tags=["auth"], summary="Log out and revoke current token", ) async def custom_logout(request: Request) -> Response: """Revoke the current bearer token so it cannot be used anymore.""" token = extract_bearer_token(request) if token: revoke_token(token) return Response(status_code=status.HTTP_204_NO_CONTENT) router.include_router( fastapi_users.get_auth_router(auth_backend), prefix="/auth/jwt", tags=["auth"] ) router.include_router( fastapi_users.get_register_router(UserRead, UserCreate), prefix="/auth", tags=["auth"], ) router.include_router( fastapi_users.get_reset_password_router(), prefix="/auth", tags=["auth"], ) router.include_router( fastapi_users.get_verify_router(UserRead), prefix="/auth", tags=["auth"], ) router.include_router( fastapi_users.get_users_router(UserRead, UserUpdate), prefix="/users", tags=["users"], )