es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hago un controlador de ruta protegida para SvelteKit utilizando el adaptador estático?

Parece que todas las soluciones disponibles requieren SSR (que no estamos utilizando). Estoy usando adapter-static y el usuario se almacena en localStorage, por lo que de todos modos el SSR no funcionaría.

Estoy intentando proteger las páginas que requieren inicio de sesión en svelte-kit:

<script context="module">
    import { authGuard } from '@lib/guard.js';
</script>

<script>
    import { page } from '$app/stores';
    import NavBar from '../components/NavBar.svelte';
    import TopNav from '../components/TopNav.svelte';

    let currentPage;

    page.subscribe((path) => (currentPage = path));
</script>

{#if currentPage.path === '/login'}
    <main class="sans-navbar">
        <topnav></topnav>
        <section>
            <slot></slot>
        </section>
    </main>
{:else}
    <main>
        <navbar></navbar>
        <section>
            <slot></slot>
        </section>
    </main>
{/if}

<style>
    main {
        display: flex;
        justify-content: flex-start;
        min-height: 100vh;
    }

    main.sans-navbar {
        flex-direction: column;
    }

    section {
        padding: 2.4rem;
        width: 100%;
        min-height: 100vh;
        background-color: #f2f6fa;
    }
</style>

Aquí está la librería guard.js:

import { LoggedIn } from '../stores/user';

export async function authGuard({ page }) {
    console.log(LoggedIn, page);
    if (LoggedIn && page.path === '/login') {
        return { status: 302, redirect: '/' };
    } else if (LoggedIn) {
        return {};
    } else {
        return { status: 302, redirect: '/login' };
    }
}

export default {
    authGuard
};

El problema es que LoggedIn requiere localStorage, por lo que la solución de SSR no funcionará.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El autor está intentando proteger páginas en una aplicación SvelteKit que requieren inicio de sesión. Han implementado una función authGuard que verifica si el usuario ha iniciado sesión y los redirige en consecuencia. Sin embargo, notan que las soluciones existentes para proteger páginas implican renderizado en el lado del servidor (SSR), que no están utilizando. En su lugar, están utilizando el adaptador adapter-static y el estado de inicio de sesión del usuario se guarda en localStorage.

    Han proporcionado el código para el diseño de su página, que incluye una verificación de la ruta de la página actual y representa condicionalmente una barra de navegación basada en si el usuario está en la página de inicio de sesión o no. También han proporcionado el código para su biblioteca guard.js, que exporta una función authGuard que verifica si el usuario ha iniciado sesión y los redirige si es necesario.

    El problema es que LoggedIn, la variable que indica si el usuario actualmente ha iniciado sesión, requiere localStorage, que no está disponible durante el renderizado en el lado del servidor. Por lo tanto, la implementación actual no funcionará con SSR.

Comments are closed.