forbidden

La función forbidden lanza un error que muestra una página de error 403 de Next.js. Es útil para manejar errores de autorización en tu aplicación. Puedes personalizar la interfaz de usuario usando el archivo forbidden.js.

Para comenzar a usar forbidden, activa la opción experimental authInterrupts en tu archivo next.config.js:

import type { NextConfig } from 'next'

const nextConfig: NextConfig = {
  experimental: {
    authInterrupts: true,
  },
}

export default nextConfig

forbidden puede invocarse en Componentes del Servidor (Server Components), Acciones del Servidor (Server Actions) y Manejadores de Ruta (Route Handlers).

import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

export default async function AdminPage() {
  const session = await verifySession()

  // Verifica si el usuario tiene el rol 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Renderiza la página de admin para usuarios autorizados
  return <></>
}

Bueno saber

Ejemplos

Protección de rutas basada en roles

Puedes usar forbidden para restringir el acceso a ciertas rutas según los roles de usuario. Esto asegura que usuarios autenticados pero sin los permisos requeridos no puedan acceder a la ruta.

import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

export default async function AdminPage() {
  const session = await verifySession()

  // Verifica si el usuario tiene el rol 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Renderiza la página de admin para usuarios autorizados
  return (
    <main>
      <h1>Panel de Administración</h1>
      <p>¡Bienvenido, {session.user.name}!</p>
    </main>
  )
}

Mutaciones con Acciones del Servidor

Al implementar mutaciones en Acciones del Servidor, puedes usar forbidden para permitir solo a usuarios con un rol específico actualizar datos sensibles.

'use server'

import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'
import db from '@/app/lib/db'

export async function updateRole(formData: FormData) {
  const session = await verifySession()

  // Asegura que solo admins pueden actualizar roles
  if (session.role !== 'admin') {
    forbidden()
  }

  // Realiza la actualización de rol para usuarios autorizados
  // ...
}

Historial de versiones

VersiónCambios
v15.1.0Se introdujo forbidden.

On this page