add auth server hooks
This commit is contained in:
+34
-3
@@ -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 { building } from '$app/environment';
|
||||||
import { auth } from '$lib/server/auth';
|
import { auth } from '$lib/server/auth';
|
||||||
import { svelteKitHandler } from 'better-auth/svelte-kit';
|
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 });
|
const session = await auth.api.getSession({ headers: event.request.headers });
|
||||||
|
|
||||||
if (session) {
|
if (session) {
|
||||||
@@ -11,7 +12,37 @@ const handleBetterAuth: Handle = async ({ event, resolve }) => {
|
|||||||
event.locals.user = session.user;
|
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 });
|
return svelteKitHandler({ event, resolve, auth, building });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const handle: Handle = handleBetterAuth;
|
export const handle: Handle = sequence(
|
||||||
|
authSessionHook,
|
||||||
|
authRedirectHook,
|
||||||
|
betterAuthHook
|
||||||
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user