48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { redirect } from '@sveltejs/kit';
|
|
import type { LayoutServerLoad } from './$types';
|
|
import {
|
|
validateAuth,
|
|
getUserCompanies,
|
|
getAuthTokens,
|
|
clearAuthTokens
|
|
} from '$lib/server/api';
|
|
|
|
export const load: LayoutServerLoad = async ({ cookies, url, fetch }) => {
|
|
// Verificar si existe el token en las cookies
|
|
const { accessToken } = getAuthTokens(cookies);
|
|
|
|
// Si no hay token, redirigir al login
|
|
if (!accessToken) {
|
|
const redirectUrl = `/login?redirect=${encodeURIComponent(url.pathname)}`;
|
|
throw redirect(303, redirectUrl);
|
|
}
|
|
|
|
// Validar el token con el backend y obtener datos del usuario
|
|
// La función validateAuth maneja automáticamente el refresh de tokens
|
|
const redirectOnFail = `/login?redirect=${encodeURIComponent(url.pathname)}`;
|
|
|
|
try {
|
|
const userData = await validateAuth(cookies, fetch, redirectOnFail);
|
|
|
|
// Cargar las compañías del usuario en el servidor (SSR)
|
|
const companies = await getUserCompanies(cookies, fetch);
|
|
|
|
return {
|
|
authenticated: true,
|
|
user: userData,
|
|
companies, // Pasar las compañías al cliente
|
|
error: undefined // Agregar error opcional para compatibilidad con error-handler
|
|
};
|
|
} catch (error) {
|
|
// Si es un redirect, re-lanzarlo sin tocar las cookies
|
|
if (error && typeof error === 'object' && 'status' in error && 'location' in error) {
|
|
throw error;
|
|
}
|
|
|
|
// Para cualquier otro error (conexión, etc), limpiar token y redirigir
|
|
console.error('🔐 [Dashboard] Error validando token:', error);
|
|
clearAuthTokens(cookies);
|
|
throw redirect(303, redirectOnFail);
|
|
}
|
|
};
|