add auth server hooks

This commit is contained in:
hiperman
2026-02-22 01:40:59 -05:00
parent 85f5292369
commit 2bb3b48e28
+34 -3
View File
@@ -1,9 +1,10 @@
import type { Handle } from '@sveltejs/kit';
import { redirect, type Handle } from '@sveltejs/kit';
import { sequence } from '@sveltejs/kit/hooks';
import { building } from '$app/environment';
import { auth } from '$lib/server/auth';
import { svelteKitHandler } from 'better-auth/svelte-kit';
const handleBetterAuth: Handle = async ({ event, resolve }) => {
const authSessionHook: Handle = async ({ event, resolve }) => {
const session = await auth.api.getSession({ headers: event.request.headers });
if (session) {
@@ -11,7 +12,37 @@ const handleBetterAuth: Handle = async ({ event, resolve }) => {
event.locals.user = session.user;
}
return resolve(event);
};
const authRedirectHook: Handle = async ({ event, resolve }) => {
// Skip redirects for auth API routes to prevent infinite loops
if (event.url.pathname.startsWith('/api/auth')) {
return resolve(event);
}
const publicRoutes = ['/login'];
const isPublicRoute = publicRoutes.some((route) => event.url.pathname === route);
// Redirect to login page if logged out
if (!isPublicRoute && !event.locals.session) {
redirect(303, '/login');
}
// Redirect to dashboard if logged in
if (event.url.pathname === '/login' && event.locals.session) {
redirect(303, '/');
}
return resolve(event);
};
const betterAuthHook: Handle = async ({ event, resolve }) => {
return svelteKitHandler({ event, resolve, auth, building });
};
export const handle: Handle = handleBetterAuth;
export const handle: Handle = sequence(
authSessionHook,
authRedirectHook,
betterAuthHook
);