rp
11/23/2021, 9:49 AMrp
11/23/2021, 9:50 AMJim Gambit
11/23/2021, 9:50 AMJim Gambit
11/23/2021, 9:53 AMkakashi_44
11/23/2021, 10:16 AMkakashi_44
11/23/2021, 10:17 AMpython
from supertokens_python.recipe.session.asyncio import revoke_all_sessions_for_user
from supertokens_python import init
from supertokens_python.recipe import session
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from supertokens_python.framework.fastapi.fastapi_request import FastApiRequest
from typing import Union
def override_session_functions(original_implementation):
original_create_new_session = original_implementation.create_new_session
async def create_new_session(request: FastApiRequest, user_id: str, jwt_payload: Union[dict, None] = None, session_data: Union[dict, None] = None):
await revoke_all_sessions_for_user(user_id)
# to access original request object, just do:
original_request = request.original
return await original_create_new_session(request, user_id, jwt_payload, session_data)
original_implementation.create_new_session = create_new_session
return original_implementation
init({
'app_info': {...},
'supertokens': {...},
'framework': '...',
'recipe_list': [
session.init({
'override': {
'functions': override_session_functions
}
})
]
})
kakashi_44
11/23/2021, 10:18 AMoriginal_request = request.original
as shown in the above code snippetJim Gambit
11/23/2021, 10:18 AMkakashi_44
11/23/2021, 10:19 AMrp
11/23/2021, 10:52 AMJim Gambit
11/23/2021, 11:32 AMJim Gambit
11/23/2021, 11:38 AMrp
11/23/2021, 12:46 PMrp
11/23/2021, 12:46 PMrp
11/23/2021, 12:47 PMjj_
11/24/2021, 3:49 AMrp
11/24/2021, 4:45 AMjj_
11/24/2021, 4:52 AMrp
11/24/2021, 4:53 AMjj_
11/24/2021, 4:56 AMrp
11/24/2021, 5:30 AMrp
11/24/2021, 5:37 AM{status: "GENERAL_ERROR", message: "some custom error message"}
Then in the UI, you will see "some custom error message"rp
11/24/2021, 5:37 AMrp
11/24/2021, 5:40 AMjs
Session.init({
override: {
functions: (oI) => {
return {
...oI,
createNewSession: async function (_) {
// for example purposes, we are always throwing an error...
throw new Error("create session failed");
}
}
}
}
})
Then we can catch that in the app's error handler like this:
js
app.use((err, req, res, next) => {
if (err.message === "create session failed") {
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify({
status: "GENERAL_ERROR",
message: "Unable to make new session" // this message will get displayed to the user.
}));
return;
}
res.status(500).send("Internal error: " + err.message);
});
ZeferiniX
11/24/2021, 6:25 PMsupertokens-node
from v7 to v8 and just found out getSessionData
has been deprecated. Would probably be helpful if that's logged somehow. That aside, I'm trying to migrate to the recommended function which is getSessionInformation
and the type reference from the docs doesn't match what's usable in the code.ZeferiniX
11/24/2021, 6:25 PMZeferiniX
11/24/2021, 6:26 PMrp
11/24/2021, 6:27 PMZeferiniX
11/24/2021, 6:27 PMsessionData
actually go?rp
11/24/2021, 6:27 PMrp
11/24/2021, 6:27 PM