Luca
08/25/2022, 6:57 PMpython
def override_session_functions(oi: RecipeInterface):
original_create_new_session = oi.create_new_session
original_refresh_session = oi.refresh_session
original_get_session = oi.get_session
async def create_new_session(request, user_id, access_token_payload, session_data, user_context):
session = await original_create_new_session(request, user_id, access_token_payload, session_data, user_context)
_update_headers_in_request(request)
return session
async def refresh_session(request, user_context):
_update_headers_in_request(request)
session = await original_refresh_session(request, user_context)
_update_headers_for_response(...) # How to get response to provide it here?
return session
oi.create_new_session = create_new_session
return oi
rp_st
08/26/2022, 5:18 AMLuca
08/26/2022, 2:13 PMLuca
08/26/2022, 2:13 PMLuca
08/26/2022, 2:17 PMpython
from supertokens_python.framework.fastapi.fastapi_request import BaseRequest
from supertokens_python.recipe.session.interfaces import RecipeInterface
from config2 import SUPERTOKENS_HEADER
from starlette.requests import Request
def _update_headers_in_request(rq: BaseRequest):
rq: Request = rq.request
new_headers = rq.headers.mutablecopy()
if cookie := new_headers.get(SUPERTOKENS_HEADER):
new_headers['cookie'] = cookie
rq._headers = new_headers
rq.scope.update(headers=rq.headers.raw)
def override_session_functions(oi: RecipeInterface):
original_create_new_session = oi.create_new_session
original_refresh_session = oi.refresh_session
original_get_session = oi.get_session
async def create_new_session(request, user_id, access_token_payload, session_data, user_context):
_update_headers_in_request(request)
print('cookie', request.get_header('cookie'))
session = await original_create_new_session(request, user_id, access_token_payload, session_data, user_context)
return session
async def refresh_session(request, user_context):
_update_headers_in_request(request)
print('cookie', request.get_header('cookie'))
session = await original_refresh_session(request, user_context)
return session
async def get_session(request, anti_csrf, session_required, user_context):
_update_headers_in_request(request)
print('cookie', request.get_header('cookie'))
session = await original_get_session(request, anti_csrf, session_required, user_context)
return session
oi.create_new_session = create_new_session
oi.refresh_session = refresh_session
oi.get_session = get_session
return oi