Is this a good way to handle auth in hooks.server.ts?

import { building } from '$app/environment';
import { auth } from '$lib/server/auth';
import { redirect, type Handle } from '@sveltejs/kit';
import { svelteKitHandler } from 'better-auth/svelte-kit';

export const handle: Handle = async ({ event, resolve }) => {
const isProtectedRoute = event.route.id?.startsWith('/(protected)/');
const isAuthRoute = event.route.id?.startsWith('/(auth)/');

// Only check session for protected and auth routes
if (isProtectedRoute || isAuthRoute) {
const session = await auth.api.getSession({
headers: event.request.headers
});

const hasSession = !!session;

// Protected routes: require authentication
if (isProtectedRoute && !hasSession) {
throw redirect(307, '/sign-in');
}

// Auth routes: redirect if already authenticated
if (isAuthRoute && hasSession) {
throw redirect(307, '/dashboard');
}

// Set session data for authenticated users on protected routes
if (isProtectedRoute && hasSession) {
event.locals.session = session.session;
event.locals.user = session.user;
}
}

return svelteKitHandler({ event, resolve, auth, building });
};
import { building } from '$app/environment';
import { auth } from '$lib/server/auth';
import { redirect, type Handle } from '@sveltejs/kit';
import { svelteKitHandler } from 'better-auth/svelte-kit';

export const handle: Handle = async ({ event, resolve }) => {
const isProtectedRoute = event.route.id?.startsWith('/(protected)/');
const isAuthRoute = event.route.id?.startsWith('/(auth)/');

// Only check session for protected and auth routes
if (isProtectedRoute || isAuthRoute) {
const session = await auth.api.getSession({
headers: event.request.headers
});

const hasSession = !!session;

// Protected routes: require authentication
if (isProtectedRoute && !hasSession) {
throw redirect(307, '/sign-in');
}

// Auth routes: redirect if already authenticated
if (isAuthRoute && hasSession) {
throw redirect(307, '/dashboard');
}

// Set session data for authenticated users on protected routes
if (isProtectedRoute && hasSession) {
event.locals.session = session.session;
event.locals.user = session.user;
}
}

return svelteKitHandler({ event, resolve, auth, building });
};
0 Replies
No replies yetBe the first to reply to this messageJoin

Did you find this page helpful?