Integrating with SvelteKit
The following code works fine,
but when I try to use
// 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;
}
};
svelteKitHandler
, page.data.session
is always undefined1 Reply
// 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;
}
};