メインコンテンツまでスキップ

forbidden

forbidden 関数は、Next.js の 403 エラーページをレンダリングするエラーをスローします。これは、アプリケーション内での認可エラーを処理するのに役立ちます。UI は forbidden.js ファイルを使用してカスタマイズできます。

forbidden を使用するには、next.config.js ファイルで実験的な authInterrupts 設定オプションを有効にします:

next.config.ts
import type { NextConfig } from 'next'

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

export default nextConfig

forbidden は、Server ComponentsServer Actions、および Route Handlers で呼び出すことができます。

app/auth/page.tsx
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 <></>
}

Good to know

Examples

ロールベースのルート保護

forbidden を使用して、ユーザーロールに基づいて特定のルートへのアクセスを制限できます。これにより、認証されているが必要な権限を持たないユーザーがルートにアクセスできないようにします。

app/admin/page.tsx
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>Admin Dashboard</h1>
<p>Welcome, {session.user.name}!</p>
</main>
)
}

Server Actions でのミューテーション

Server Actions でミューテーションを実装する際に、forbidden を使用して特定のロールを持つユーザーのみが機密データを更新できるようにすることができます。

app/actions/update-role.ts
'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()
}

// 認可されたユーザーのためにロールを更新
// ...
}

バージョン履歴

バージョン変更内容
v15.1.0forbidden が導入されました