forbidden

Die forbidden-Funktion wirft einen Fehler, der eine Next.js 403-Fehlerseite rendert. Sie ist nützlich für die Behandlung von Autorisierungsfehlern in Ihrer Anwendung. Die Benutzeroberfläche kann mit der forbidden.js-Datei angepasst werden.

Um forbidden zu verwenden, aktivieren Sie die experimentelle authInterrupts-Konfigurationsoption in Ihrer next.config.js-Datei:

import type { NextConfig } from 'next'

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

export default nextConfig

forbidden kann in Server Components, Server Actions und Route Handlers aufgerufen werden.

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

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

  // Überprüfen, ob der Benutzer die 'admin'-Rolle hat
  if (session.role !== 'admin') {
    forbidden()
  }

  // Admin-Seite für autorisierte Benutzer rendern
  return <></>
}

Wissenswertes

  • Die forbidden-Funktion kann nicht im Root Layout aufgerufen werden.

Beispiele

Rollenbasierter Routenschutz

Mit forbidden kann der Zugriff auf bestimmte Routen basierend auf Benutzerrollen eingeschränkt werden. Dies stellt sicher, dass authentifizierte Benutzer ohne die erforderlichen Berechtigungen die Route nicht aufrufen können.

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

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

  // Überprüfen, ob der Benutzer die 'admin'-Rolle hat
  if (session.role !== 'admin') {
    forbidden()
  }

  // Admin-Seite für autorisierte Benutzer rendern
  return (
    <main>
      <h1>Admin-Dashboard</h1>
      <p>Willkommen, {session.user.name}!</p>
    </main>
  )
}

Mutationen mit Server Actions

Bei der Implementierung von Mutationen in Server Actions kann forbidden verwendet werden, um nur Benutzern mit einer bestimmten Rolle das Aktualisieren sensibler Daten zu erlauben.

'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()

  // Nur Admins dürfen Rollen aktualisieren
  if (session.role !== 'admin') {
    forbidden()
  }

  // Rollenaktualisierung für autorisierte Benutzer durchführen
  // ...
}

Versionsverlauf

VersionÄnderungen
v15.1.0forbidden eingeführt.

On this page