unauthorized

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

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

import type { NextConfig } from 'next'

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

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

Функцию unauthorized можно вызывать в Серверных компонентах (Server Components), Серверных действиях (Server Actions) и Обработчиках маршрутов (Route Handlers).

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

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

  if (!session) {
    unauthorized()
  }

  // Рендеринг панели управления для аутентифицированных пользователей
  return (
    <main>
      <h1>Добро пожаловать в панель управления</h1>
      <p>Привет, {session.user.name}.</p>
    </main>
  )
}
import { verifySession } from '@/app/lib/dal'
import { unauthorized } from 'next/navigation'

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

  if (!session) {
    unauthorized()
  }

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

Важно знать

Примеры

Отображение интерфейса входа для неаутентифицированных пользователей

Вы можете использовать функцию unauthorized для отображения файла unauthorized.js с интерфейсом входа.

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

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

  if (!session) {
    unauthorized()
  }

  return <div>Панель управления</div>
}
import { verifySession } from '@/app/lib/dal'
import { unauthorized } from 'next/navigation'

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

  if (!session) {
    unauthorized()
  }

  return <div>Панель управления</div>
}
import Login from '@/app/components/Login'

export default function UnauthorizedPage() {
  return (
    <main>
      <h1>401 - Неавторизован</h1>
      <p>Пожалуйста, войдите для доступа к этой странице.</p>
      <Login />
    </main>
  )
}
import Login from '@/app/components/Login'

export default function UnauthorizedPage() {
  return (
    <main>
      <h1>401 - Неавторизован</h1>
      <p>Пожалуйста, войдите для доступа к этой странице.</p>
      <Login />
    </main>
  )
}

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

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

'use server'

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

export async function updateProfile(data: FormData) {
  const session = await verifySession()

  // Если пользователь не аутентифицирован, возвращаем 401
  if (!session) {
    unauthorized()
  }

  // Продолжаем мутацию
  // ...
}
'use server'

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

export async function updateProfile(data) {
  const session = await verifySession()

  // Если пользователь не аутентифицирован, возвращаем 401
  if (!session) {
    unauthorized()
  }

  // Продолжаем мутацию
  // ...
}

Получение данных с помощью обработчиков маршрутов

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

import { NextRequest, NextResponse } from 'next/server'
import { verifySession } from '@/app/lib/dal'
import { unauthorized } from 'next/navigation'

export async function GET(req: NextRequest): Promise<NextResponse> {
  // Проверяем сессию пользователя
  const session = await verifySession()

  // Если сессии нет, возвращаем 401 и отображаем unauthorized.tsx
  if (!session) {
    unauthorized()
  }

  // Получаем данные
  // ...
}
import { verifySession } from '@/app/lib/dal'
import { unauthorized } from 'next/navigation'

export async function GET() {
  const session = await verifySession()

  // Если пользователь не аутентифицирован, возвращаем 401 и отображаем unauthorized.tsx
  if (!session) {
    unauthorized()
  }

  // Получаем данные
  // ...
}

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

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