Implement logout route

This commit is contained in:
François Voron
2020-02-03 10:12:33 +01:00
parent 0fdd0fd070
commit 05b1df9a16
13 changed files with 238 additions and 0 deletions

View File

@ -28,3 +28,6 @@ class BaseAuthentication:
async def get_login_response(self, user: BaseUserDB, response: Response) -> Any:
raise NotImplementedError()
async def get_logout_response(self, user: BaseUserDB, response: Response) -> Any:
raise NotImplementedError()

View File

@ -67,5 +67,10 @@ class CookieAuthentication(JWTAuthentication):
# so that FastAPI can terminate it properly
return None
async def get_logout_response(self, user: BaseUserDB, response: Response) -> Any:
response.delete_cookie(
self.cookie_name, path=self.cookie_path, domain=self.cookie_domain
)
async def _retrieve_token(self, request: Request) -> Optional[str]:
return await self.api_key_cookie.__call__(request)

View File

@ -36,6 +36,21 @@ def _add_login_route(
return await auth_backend.get_login_response(user, response)
def _add_logout_route(
router: EventHandlersRouter,
authenticator: Authenticator,
auth_backend: BaseAuthentication,
):
@router.post(f"/logout/{auth_backend.name}")
async def logout(
response: Response, user=Depends(authenticator.get_current_active_user)
):
try:
return await auth_backend.get_logout_response(user, response)
except NotImplementedError:
response.status_code = status.HTTP_202_ACCEPTED
def get_user_router(
user_db: BaseUserDatabase[models.BaseUserDB],
user_model: Type[models.BaseUser],
@ -71,6 +86,7 @@ def get_user_router(
for auth_backend in authenticator.backends:
_add_login_route(router, user_db, auth_backend)
_add_logout_route(router, authenticator, auth_backend)
@router.post(
"/register", response_model=user_model, status_code=status.HTTP_201_CREATED