forbidden

La fonction forbidden déclenche une erreur qui affiche une page d'erreur 403 dans Next.js. Elle est utile pour gérer les erreurs d'autorisation dans votre application. Vous pouvez personnaliser l'interface utilisateur en utilisant le fichier forbidden.js.

Pour commencer à utiliser forbidden, activez l'option expérimentale authInterrupts dans votre fichier next.config.js :

import type { NextConfig } from 'next'

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

export default nextConfig
module.exports = {
  experimental: {
    authInterrupts: true,
  },
}

forbidden peut être appelée dans les Composants Serveur, les Actions Serveur et les Gestionnaires de Route.

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

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

  // Vérifie si l'utilisateur a le rôle 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Affiche la page admin pour les utilisateurs autorisés
  return <></>
}
import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

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

  // Vérifie si l'utilisateur a le rôle 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Affiche la page admin pour les utilisateurs autorisés
  return <></>
}
## Bon à savoir

- La fonction `forbidden` ne peut pas être appelée dans le [layout racine](/docs/app/api-reference/file-conventions/layout#root-layout).

## Exemples

### Protection de route basée sur les rôles

Vous pouvez utiliser `forbidden` pour restreindre l'accès à certaines routes en fonction des rôles des utilisateurs. Cela garantit que les utilisateurs authentifiés mais sans les permissions requises ne peuvent pas accéder à la route.

```tsx filename="app/admin/page.tsx" switcher
import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

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

  // Vérifie si l'utilisateur a le rôle 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Affiche la page admin pour les utilisateurs autorisés
  return (
    <main>
      <h1>Tableau de bord Admin</h1>
      <p>Bienvenue, {session.user.name} !</p>
    </main>
  )
}
import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

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

  // Vérifie si l'utilisateur a le rôle 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Affiche la page admin pour les utilisateurs autorisés
  return (
    <main>
      <h1>Tableau de bord Admin</h1>
      <p>Bienvenue, {session.user.name} !</p>
    </main>
  )
}

Mutations avec Actions Serveur

Lors de l'implémentation de mutations dans les Actions Serveur, vous pouvez utiliser forbidden pour n'autoriser que les utilisateurs avec un rôle spécifique à mettre à jour des données 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()

  // S'assure que seuls les admins peuvent mettre à jour les rôles
  if (session.role !== 'admin') {
    forbidden()
  }

  // Effectue la mise à jour du rôle pour les utilisateurs autorisés
  // ...
}
'use server'

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

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

  // S'assure que seuls les admins peuvent mettre à jour les rôles
  if (session.role !== 'admin') {
    forbidden()
  }

  // Effectue la mise à jour du rôle pour les utilisateurs autorisés
  // ...
}

Historique des versions

VersionChangements
v15.1.0Introduction de forbidden.