forbidden

Функция forbidden вызывает ошибку, которая отображает страницу ошибки 403 в Next.js. Она полезна для обработки ошибок авторизации в вашем приложении. Вы можете настроить интерфейс с помощью файла forbidden.js.

Чтобы начать использовать forbidden, включите экспериментальную опцию конфигурации authInterrupts в вашем файле next.config.js:

import type { NextConfig } from 'next'

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

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

Функцию forbidden можно вызывать в Серверных компонентах, Серверных действиях и Обработчиках маршрутов.

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

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

  // Проверяем, есть ли у пользователя роль 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Отображаем страницу администратора для авторизованных пользователей
  return <></>
}
import { verifySession } from '@/app/lib/dal'
import { forbidden } from 'next/navigation'

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

  // Проверяем, есть ли у пользователя роль 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Отображаем страницу администратора для авторизованных пользователей
  return <></>
}

Полезно знать

Примеры

Защита маршрутов на основе ролей

Вы можете использовать forbidden для ограничения доступа к определенным маршрутам в зависимости от ролей пользователей. Это гарантирует, что пользователи, которые прошли аутентификацию, но не имеют необходимых прав, не смогут получить доступ к маршруту.

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

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

  // Проверяем, есть ли у пользователя роль 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Отображаем страницу администратора для авторизованных пользователей
  return (
    <main>
      <h1>Панель администратора</h1>
      <p>Добро пожаловать, {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()

  // Проверяем, есть ли у пользователя роль 'admin'
  if (session.role !== 'admin') {
    forbidden()
  }

  // Отображаем страницу администратора для авторизованных пользователей
  return (
    <main>
      <h1>Панель администратора</h1>
      <p>Добро пожаловать, {session.user.name}!</p>
    </main>
  )
}

Мутации с помощью серверных действий

При реализации мутаций в серверных действиях вы можете использовать forbidden, чтобы разрешить обновление конфиденциальных данных только пользователям с определенной ролью.

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

  // Гарантируем, что только администраторы могут обновлять роли
  if (session.role !== 'admin') {
    forbidden()
  }

  // Выполняем обновление роли для авторизованных пользователей
  // ...
}
'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()

  // Гарантируем, что только администраторы могут обновлять роли
  if (session.role !== 'admin') {
    forbidden()
  }

  // Выполняем обновление роли для авторизованных пользователей
  // ...
}

История версий

ВерсияИзменения
v15.1.0Добавлена функция forbidden.