Pass user_manager instance in get_login_response/get_logout_response

This commit is contained in:
François Voron
2021-09-21 08:28:25 +02:00
parent e819bb0b65
commit eb47dc8e75
9 changed files with 68 additions and 23 deletions

View File

@@ -34,8 +34,18 @@ class BaseAuthentication(Generic[T, models.UC, models.UD]):
) -> Optional[models.UD]:
raise NotImplementedError()
async def get_login_response(self, user: models.UD, response: Response) -> Any:
async def get_login_response(
self,
user: models.UD,
response: Response,
user_manager: BaseUserManager[models.UC, models.UD],
) -> Any:
raise NotImplementedError()
async def get_logout_response(self, user: models.UD, response: Response) -> Any:
async def get_logout_response(
self,
user: models.UD,
response: Response,
user_manager: BaseUserManager[models.UC, models.UD],
) -> Any:
raise NotImplementedError()

View File

@@ -91,7 +91,12 @@ class CookieAuthentication(
except UserNotExists:
return None
async def get_login_response(self, user: models.UD, response: Response) -> Any:
async def get_login_response(
self,
user: models.UD,
response: Response,
user_manager: BaseUserManager[models.UC, models.UD],
) -> Any:
token = await self._generate_token(user)
response.set_cookie(
self.cookie_name,
@@ -108,7 +113,12 @@ class CookieAuthentication(
# so that FastAPI can terminate it properly
return None
async def get_logout_response(self, user: models.UD, response: Response) -> Any:
async def get_logout_response(
self,
user: models.UD,
response: Response,
user_manager: BaseUserManager[models.UC, models.UD],
) -> Any:
response.delete_cookie(
self.cookie_name, path=self.cookie_path, domain=self.cookie_domain
)

View File

@@ -67,7 +67,12 @@ class JWTAuthentication(
except UserNotExists:
return None
async def get_login_response(self, user: models.UD, response: Response) -> Any:
async def get_login_response(
self,
user: models.UD,
response: Response,
user_manager: BaseUserManager[models.UC, models.UD],
) -> Any:
token = await self._generate_token(user)
return {"access_token": token, "token_type": "bearer"}

View File

@@ -37,12 +37,18 @@ def get_auth_router(
status_code=status.HTTP_400_BAD_REQUEST,
detail=ErrorCode.LOGIN_USER_NOT_VERIFIED,
)
return await backend.get_login_response(user, response)
return await backend.get_login_response(user, response, user_manager)
if backend.logout:
@router.post("/logout")
async def logout(response: Response, user=Depends(get_current_user)):
return await backend.get_logout_response(user, response)
async def logout(
response: Response,
user=Depends(get_current_user),
user_manager: BaseUserManager[models.UC, models.UD] = Depends(
get_user_manager
),
):
return await backend.get_logout_response(user, response, user_manager)
return router

View File

@@ -112,6 +112,6 @@ def get_oauth_router(
# Authenticate
for backend in authenticator.backends:
if backend.name == state_data["authentication_backend"]:
return await backend.get_login_response(user, response)
return await backend.get_login_response(user, response, user_manager)
return router