Mejora de fromts
This commit is contained in:
11
frontend-internal/src/app.d.ts
vendored
Normal file
11
frontend-internal/src/app.d.ts
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
import type { InternalUser } from '$lib/stores/auth';
|
||||
|
||||
declare global {
|
||||
namespace App {
|
||||
interface Locals {
|
||||
user: InternalUser | null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export {};
|
||||
19
frontend-internal/src/hooks.server.ts
Normal file
19
frontend-internal/src/hooks.server.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import type { Handle } from '@sveltejs/kit';
|
||||
|
||||
export const handle: Handle = async ({ event, resolve }) => {
|
||||
const cookie = event.request.headers.get('cookie') ?? '';
|
||||
if (cookie) {
|
||||
try {
|
||||
const apiUrl = process.env.PUBLIC_API_URL ?? 'http://backend:8000';
|
||||
const response = await fetch(`${apiUrl}/v1/auth/me`, {
|
||||
headers: { cookie, 'X-App': 'internal' }
|
||||
});
|
||||
event.locals.user = response.ok ? await response.json() : null;
|
||||
} catch {
|
||||
event.locals.user = null;
|
||||
}
|
||||
} else {
|
||||
event.locals.user = null;
|
||||
}
|
||||
return resolve(event);
|
||||
};
|
||||
@@ -190,6 +190,11 @@ function createAuthStore() {
|
||||
update(state => ({ ...state, user }));
|
||||
},
|
||||
|
||||
// Set user from SSR pre-load (no fetch required)
|
||||
setUser: (user: InternalUser) => {
|
||||
set({ user, token: null, refreshToken: null, isAuthenticated: true, isLoading: false });
|
||||
},
|
||||
|
||||
// Set loading state
|
||||
setLoading: (isLoading: boolean) => {
|
||||
update(state => ({ ...state, isLoading }));
|
||||
|
||||
7
frontend-internal/src/routes/+layout.server.ts
Normal file
7
frontend-internal/src/routes/+layout.server.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import type { LayoutServerLoad } from './$types';
|
||||
|
||||
export const load: LayoutServerLoad = ({ locals }) => {
|
||||
return {
|
||||
user: locals.user ?? null
|
||||
};
|
||||
};
|
||||
@@ -10,11 +10,15 @@
|
||||
import { browser } from '$app/environment';
|
||||
import '../app.css';
|
||||
|
||||
export let data;
|
||||
|
||||
let sidebarOpen = false;
|
||||
let mounted = false;
|
||||
|
||||
onMount(async () => {
|
||||
await auth.init();
|
||||
onMount(() => {
|
||||
if (data.user && !$auth.isAuthenticated) {
|
||||
auth.setUser(data.user);
|
||||
}
|
||||
mounted = true;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user