FastAPI Sessions
Revision as of 12:28, 7 May 2022 by PeterHarding (talk | contribs) (Created page with "Not sure where this came from - shoul dhave captured the link. <pre> # ============================================================================= # Session setup # ----------------------------------------------------------------------------- class SessionData(BaseModel): username: str cookie_params = CookieParameters() # Uses UUID cookie = SessionCookie( cookie_name="cookie", identifier="general_verifier", auto_error=True, secret_key="DONOTUSE...")
Not sure where this came from - shoul dhave captured the link.
# ============================================================================= # Session setup # ----------------------------------------------------------------------------- class SessionData(BaseModel): username: str cookie_params = CookieParameters() # Uses UUID cookie = SessionCookie( cookie_name="cookie", identifier="general_verifier", auto_error=True, secret_key="DONOTUSE", cookie_params=cookie_params, ) # ----------------------------------------------------------------------------- backend = InMemoryBackend[UUID, SessionData]() # ----------------------------------------------------------------------------- class BasicVerifier(SessionVerifier[UUID, SessionData]): def __init__( self, *, identifier: str, auto_error: bool, backend: InMemoryBackend[UUID, SessionData], auth_http_exception: HTTPException, ): self._identifier = identifier self._auto_error = auto_error self._backend = backend self._auth_http_exception = auth_http_exception @property def identifier(self): return self._identifier @property def backend(self): return self._backend @property def auto_error(self): return self._auto_error @property def auth_http_exception(self): return self._auth_http_exception def verify_session(self, model: SessionData) -> bool: """If the session exists, it is valid""" return True verifier = BasicVerifier( identifier="general_verifier", auto_error=True, backend=backend, auth_http_exception=HTTPException(status_code=403, detail="invalid session"), ) @app.post("/create_session/{name}") async def create_session(name: str, response: Response): session = uuid4() data = SessionData(username=name) await backend.create(session, data) cookie.attach_to_response(response, session) return f"created session for {name}" @app.get("/whoami", dependencies=[Depends(cookie)]) async def whoami(session_data: SessionData = Depends(verifier)): return session_data @app.post("/delete_session") async def del_session(response: Response, session_id: UUID = Depends(cookie)): await backend.delete(session_id) cookie.delete_from_response(response) return "deleted session"