@lucia-auth/sveltekit
Version:
SvelteKit integration for Lucia
62 lines (61 loc) • 2.42 kB
JavaScript
import { SESSION_COOKIE_NAME } from "lucia-auth";
export const handleHooks = (auth) => {
return async (data) => {
const event = data.event;
const resolve = data.resolve;
let getSessionPromise = null;
let getSessionUserPromise = null;
event.locals.setSession = (session) => {
auth.createSessionCookies(session).forEach((cookie) => {
event.cookies.set(cookie.name, cookie.value, cookie.attributes);
});
getSessionPromise = null;
getSessionUserPromise = null;
};
event.locals.validate = async () => {
if (getSessionPromise)
return getSessionPromise;
if (getSessionUserPromise)
return (await getSessionUserPromise).session;
getSessionPromise = new Promise(async (resolve) => {
try {
auth.validateRequestHeaders(event.request);
const sessionId = event.cookies.get(SESSION_COOKIE_NAME) || "";
const session = await auth.validateSession(sessionId);
if (session.isFresh) {
event.locals.setSession(session);
}
resolve(session);
}
catch {
event.locals.setSession(null);
resolve(null);
}
});
return getSessionPromise;
};
event.locals.validateUser = async () => {
if (getSessionUserPromise)
return getSessionUserPromise;
getSessionUserPromise = new Promise(async (resolve) => {
try {
auth.validateRequestHeaders(event.request);
const sessionId = event.cookies.get(SESSION_COOKIE_NAME) || "";
const { session, user } = await auth.validateSessionUser(sessionId);
if (session.isFresh) {
event.locals.setSession(session);
}
resolve({ session, user });
}
catch {
resolve({
session: null,
user: null
});
}
});
return getSessionUserPromise;
};
return await resolve(event);
};
};