Files
plantillas-proyectos/frontend/src/routes/dashboard/+layout.server.ts

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);
}
};