init
This commit is contained in:
48
src/lib/supertokens/recipes/start-session.ts
Normal file
48
src/lib/supertokens/recipes/start-session.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { getSessionForSSR } from "supertokens-node/custom";
|
||||
import { ensureSuperTokensBackend } from "../server";
|
||||
import { logger } from "../";
|
||||
|
||||
export async function getSessionForStart(request: Request, options?: { sessionRequired?: boolean }) {
|
||||
ensureSuperTokensBackend();
|
||||
|
||||
try {
|
||||
const session = await getSessionForSSR(request);
|
||||
|
||||
if (session.hasToken) {
|
||||
return {
|
||||
hasToken: true,
|
||||
accessTokenPayload: session.accessTokenPayload,
|
||||
userId: session.accessTokenPayload?.sub,
|
||||
sessionHandle: session.accessTokenPayload?.sessionHandle,
|
||||
};
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (error: any) {
|
||||
logger.error("Session error", error);
|
||||
|
||||
if (error.type === "TRY_REFRESH_TOKEN") {
|
||||
return {
|
||||
hasToken: false,
|
||||
needsRefresh: true,
|
||||
error: 'TRY_REFRESH_TOKEN'
|
||||
};
|
||||
}
|
||||
|
||||
if (options?.sessionRequired === false) {
|
||||
return null;
|
||||
}
|
||||
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export async function verifySession(request: Request, options?: { sessionRequired?: boolean }) {
|
||||
const session = await getSessionForStart(request, options);
|
||||
|
||||
if (!session && options?.sessionRequired !== false) {
|
||||
throw new Response("Unauthorized", { status: 401 });
|
||||
}
|
||||
|
||||
return session;
|
||||
}
|
||||
Reference in New Issue
Block a user