ホームページ > 記事 > ウェブフロントエンド > Next.js 認証
Next.js 15 では、特に高度なサーバー コンポーネント、アクション API、およびミドルウェア機能により、認証の処理がより堅牢かつ柔軟になりました。この記事では、Next.js 15 アプリケーションに認証を実装するためのベスト プラクティスを探り、サーバー コンポーネント、ミドルウェア、アクション、セッション管理などの重要なトピックを取り上げます。
Next.js 15 では、サーバー側のレンダリング機能が強化され、特にサーバー コンポーネントとアクション API のコンテキストで認証を処理するための新しいツールが導入されています。サーバー コンポーネントを使用すると、機密データをクライアントに公開することなくサーバー上で認証を安全に管理でき、アクション API によりシームレスなサーバー通信が可能になります。ミドルウェアは、ルートを保護し、ユーザーの権限を動的にチェックするのに役立ち、認証フローをより安全でユーザーフレンドリーなものにします。
まず、アプリに適した認証戦略を選択します。一般的なアプローチには次のようなものがあります:
OAuth を必要とするアプリケーションの場合、Next.js は next-auth と適切に統合され、セッションとトークンの管理が簡素化されます。
npm install next-auth
Next.js 15 セットアップで /app/api/auth/[...nextauth]/route.ts を使用して構成します:
// /app/api/auth/[...nextauth]/route.ts import NextAuth from "next-auth"; import GoogleProvider from "next-auth/providers/google"; export const authOptions = { providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID!, clientSecret: process.env.GOOGLE_CLIENT_SECRET!, }), ], pages: { signIn: "/auth/signin", }, }; export default NextAuth(authOptions);
Next.js 15 では、サーバー コンポーネントを使用してサーバー上でコンポーネントをレンダリングし、データへのアクセスを安全に制御できます。
サーバー コンポーネントでのユーザー セッションの取得: これにより、クライアント側の状態への依存が軽減され、クライアントでの機密データの公開が回避されます。ユーザー セッション データをサーバー コンポーネントで直接取得できます。
サーバーコンポーネントでのサーバー側認証チェックの例:
// /app/dashboard/page.tsx import { getServerSession } from "next-auth/next"; import { authOptions } from "../api/auth/[...nextauth]/route"; import { redirect } from "next/navigation"; export default async function DashboardPage() { const session = await getServerSession(authOptions); if (!session) { redirect("/auth/signin"); } return ( <div> <h1>Welcome, {session.user?.name}</h1> </div> ); }
ここで、getServerSession はユーザーのセッション データをサーバー上で安全に取得します。有効なセッションがない場合、リダイレクト機能によりユーザーはログイン ページに送信されます。
Next.js 15 の Actions API は、クライアントから直接サーバー関数と対話する方法を提供します。これは、ログイン、ログアウト、登録アクションに特に役立ちます。
npm install next-auth
// /app/api/auth/[...nextauth]/route.ts import NextAuth from "next-auth"; import GoogleProvider from "next-auth/providers/google"; export const authOptions = { providers: [ GoogleProvider({ clientId: process.env.GOOGLE_CLIENT_ID!, clientSecret: process.env.GOOGLE_CLIENT_SECRET!, }), ], pages: { signIn: "/auth/signin", }, }; export default NextAuth(authOptions);
loginAction はサーバー アクションとして安全に定義されており、クライアントは機密データを公開することなくそれをトリガーできます。
Next.js 15 のミドルウェアは、ページを読み込む前にサーバー上の認証ステータスを確認することでルートを保護する強力な方法を提供します。
/dashboard や /profile などのページを保護するには、middleware.ts にミドルウェアを作成します。
// /app/dashboard/page.tsx import { getServerSession } from "next-auth/next"; import { authOptions } from "../api/auth/[...nextauth]/route"; import { redirect } from "next/navigation"; export default async function DashboardPage() { const session = await getServerSession(authOptions); if (!session) { redirect("/auth/signin"); } return ( <div> <h1>Welcome, {session.user?.name}</h1> </div> ); }
安全なセッションを維持し、ユーザー データを保護することは、どの認証フローにおいても重要です。
トークンストレージに HTTP のみの Cookie を使用する:
セッションの有効期限とリフレッシュ トークン:
ロールベースのアクセス制御 (RBAC):
クロスサイト リクエスト フォージェリ (CSRF) 保護:
安全なヘッダーと HTTPS:
Next.js 15 は、認証を安全に管理するための堅牢なツールとコンポーネントを提供します。サーバー コンポーネント、アクション、ミドルウェアを活用することで、機密データがサーバー上で確実に保護され、クライアントに情報が公開されるリスクが軽減されます。
以上がNext.js 認証の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。