Integrating with SvelteKit

The following code works fine,
// hooks.server.ts
import { auth } from "$lib/auth";
import { redirect } from "@sveltejs/kit";
import type { Handle } from "@sveltejs/kit";

export const handle: Handle = async ({ event, resolve }) => {
try {
// Get session from better-auth
const sessionData = await auth.api.getSession({
headers: event.request.headers,
});

// Add session to locals for use in load functions
event.locals.session = sessionData || null;
event.locals.user = sessionData?.user || null;

return await resolve(event);
} catch (error) {
console.error('Server error:', error);

// Check if this is a database token expiration error
const errorMessage = (error as any)?.message || error?.toString() || '';
if (errorMessage.toLowerCase().includes('token') && errorMessage.toLowerCase().includes('expired')) {
console.log('Database token expired, redirecting to login...');

// Redirect to login page with a message
throw redirect(302, '/login?error=session_expired');
}

// Re-throw other errors
throw error;
}
};
// hooks.server.ts
import { auth } from "$lib/auth";
import { redirect } from "@sveltejs/kit";
import type { Handle } from "@sveltejs/kit";

export const handle: Handle = async ({ event, resolve }) => {
try {
// Get session from better-auth
const sessionData = await auth.api.getSession({
headers: event.request.headers,
});

// Add session to locals for use in load functions
event.locals.session = sessionData || null;
event.locals.user = sessionData?.user || null;

return await resolve(event);
} catch (error) {
console.error('Server error:', error);

// Check if this is a database token expiration error
const errorMessage = (error as any)?.message || error?.toString() || '';
if (errorMessage.toLowerCase().includes('token') && errorMessage.toLowerCase().includes('expired')) {
console.log('Database token expired, redirecting to login...');

// Redirect to login page with a message
throw redirect(302, '/login?error=session_expired');
}

// Re-throw other errors
throw error;
}
};
but when I try to use svelteKitHandler, page.data.session is always undefined
1 Reply
geodox
geodoxOP2mo ago
// hooks.server.ts
import { auth } from "$lib/auth";
import { svelteKitHandler } from "better-auth/svelte-kit";
import { building } from "$app/environment";
import { redirect } from "@sveltejs/kit";
import type { Handle } from "@sveltejs/kit";

export const handle: Handle = async ({ event, resolve }) => {
try {
// Use svelteKitHandler for better-auth functionality
const response = await svelteKitHandler({ event, resolve, auth, building });

// Get session from better-auth for additional custom handling
const sessionData = await auth.api.getSession({
headers: event.request.headers,
});

// Add session to locals for use in load functions
event.locals.session = sessionData || null;
event.locals.user = sessionData?.user || null;

return response;
} catch (error) {
console.error('Server error:', error);

// Check if this is a database token expiration error
const errorMessage = (error as any)?.message || error?.toString() || '';
if (errorMessage.toLowerCase().includes('token') && errorMessage.toLowerCase().includes('expired')) {
console.log('Database token expired, redirecting to login...');

// Redirect to login page with a message
throw redirect(302, '/login?error=session_expired');
}

// Re-throw other errors
throw error;
}
};
// hooks.server.ts
import { auth } from "$lib/auth";
import { svelteKitHandler } from "better-auth/svelte-kit";
import { building } from "$app/environment";
import { redirect } from "@sveltejs/kit";
import type { Handle } from "@sveltejs/kit";

export const handle: Handle = async ({ event, resolve }) => {
try {
// Use svelteKitHandler for better-auth functionality
const response = await svelteKitHandler({ event, resolve, auth, building });

// Get session from better-auth for additional custom handling
const sessionData = await auth.api.getSession({
headers: event.request.headers,
});

// Add session to locals for use in load functions
event.locals.session = sessionData || null;
event.locals.user = sessionData?.user || null;

return response;
} catch (error) {
console.error('Server error:', error);

// Check if this is a database token expiration error
const errorMessage = (error as any)?.message || error?.toString() || '';
if (errorMessage.toLowerCase().includes('token') && errorMessage.toLowerCase().includes('expired')) {
console.log('Database token expired, redirecting to login...');

// Redirect to login page with a message
throw redirect(302, '/login?error=session_expired');
}

// Re-throw other errors
throw error;
}
};

Did you find this page helpful?