Guardias de ruta

Route Guards le permite proteger rutas con comprobaciones de autenticación, autorización u otra lógica personalizada.

Los guardias pueden bloquear la navegación por completo o redirigir al usuario a una ubicación diferente.


Valores de retorno de guardia

Una función de guardia puede devolver:


Guardias globales

Las guardias globales se ejecutan en cada evento de navegación, antes que cualquier guardia específica de ruta.

typescript
function registerGlobalGuard(
    guard: (
        pathname: string,
        query: Record<string, unknown>,
        data: Record<string, unknown>
    ) => boolean | string | Promise<boolean | string>
): void

Ejemplo

javascript
import { registerGlobalGuard } from '@beforesemicolon/router'

// Authentication guard
registerGlobalGuard((pathname, query, state) => {
    const publicPages = ['/login', '/register', '/404']

    if (!publicPages.includes(pathname) && !userIsLoggedIn()) {
        return '/login' // Redirect to login
    }

    return true // Allow navigation
})

Guardias de ruta específica

Los guardias específicos de ruta se ejecutan solo cuando se navega a una ruta que coincide con el patrón registrado.

typescript
function registerRouteGuard(
    pattern: string,
    guard: (
        pathname: string,
        query: Record<string, unknown>,
        data: Record<string, unknown>
    ) => boolean | string | Promise<boolean | string>
): void

Ejemplo

javascript
import { registerRouteGuard } from '@beforesemicolon/router'

// Role-based authorization guard (Async)
registerRouteGuard('/admin/:section', async (pathname, query, state) => {
    try {
        const hasAccess = await checkAdminPermissions()
        return hasAccess ? true : '/unauthorized'
    } catch {
        return false // Block navigation on error
    }
})

Orden de ejecución de la guardia

  1. Guardias Globales: Ejecutados en el orden en que fueron registrados.
  2. Guardias de Ruta Específica: Ejecutados en el orden en que fueron registrados.
  3. La primera guardia que devuelve false o una redirección string detiene la ejecución inmediatamente; Se saltan las guardias posteriores.
editar este documento