React Academy · レッスン

Next.js App RouterでAuth.jsをセットアップ

Auth.jsをインストールし、route handlersを設定してGitHub OAuth providerを追加します。

レッスン 1/413 ステップ

「Next.js App RouterでAuth.jsをセットアップ」はCoddyKit上の無料React Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

Auth.jsとは

Auth.js(旧称NextAuth.js v5)は、Next.js向けの多機能な認証ライブラリです。OAuthプロバイダー、認証情報、セッション、JWTを標準で処理できます。

インストール

Auth.jsのベータ版をインストールし、設定ファイルを初期化します。

npm install next-auth@beta

# Create auth.ts at project root
touch auth.ts

Auth設定の作成

プロジェクトルートのauth.tsに、プロバイダーとコールバックを含む認証設定を定義します。

import NextAuth from 'next-auth';
import GitHub from 'next-auth/providers/github';

export const { handlers, auth, signIn, signOut } = NextAuth({
  providers: [GitHub],
  callbacks: {
    session({ session, token }) {
      session.user.id = token.sub!;
      return session;
    },
  },
});

Route Handlerの設定

app/api/auth/[...nextauth]/route.tsにキャッチオールのRoute Handlerを作成し、Auth.jsのハンドラーに処理を委譲します。

// app/api/auth/[...nextauth]/route.ts
import { handlers } from '@/auth';

export const { GET, POST } = handlers;

環境変数

OAuthプロバイダーに必要な環境変数を設定します。JWTへの署名にはAUTH_SECRETが必要です。

# .env.local
AUTH_SECRET=your-random-secret-here

# GitHub OAuth
AUTH_GITHUB_ID=your-github-client-id
AUTH_GITHUB_SECRET=your-github-client-secret

# Generate AUTH_SECRET:
# npx auth secret

サインイン/サインアウトボタンの追加

auth.tsからsignInとsignOutをインポートし、Server Componentのフォームで使用します。

import { signIn, signOut } from '@/auth';

export function SignInButton() {
  return (
    <form action={async () => { 'use server'; await signIn('github'); }}>
      <button type="submit">Sign in with GitHub</button>
    </form>
  );
}

export function SignOutButton() {
  return (
    <form action={async () => { 'use server'; await signOut(); }}>
      <button type="submit">Sign out</button>
    </form>
  );
}

Server Componentでのセッションの読み取り

任意のServer ComponentまたはRoute Handlerからauth.tsのauth()を呼び出すと、現在のセッションを取得できます。

import { auth } from '@/auth';

export default async function ProfilePage() {
  const session = await auth();
  if (!session) redirect('/login');
  return <h1>Welcome, {session.user?.name}</h1>;
}

Middlewareによるページの保護

Auth.jsのMiddlewareを使用すると、リクエストごとにサーバーロジックを実行せず、エッジでルートを保護できます。

// middleware.ts
export { auth as middleware } from '@/auth';

export const config = {
  matcher: ['/dashboard/:path*', '/profile/:path*'],
};

データベースセッション

データベースアダプター(例:@auth/prisma-adapter)を追加すると、JWTではなくデータベースにセッション、ユーザー、アカウントを永続化できます。

import { PrismaAdapter } from '@auth/prisma-adapter';
import { prisma } from '@/lib/prisma';

export const { handlers, auth, signIn, signOut } = NextAuth({
  adapter: PrismaAdapter(prisma),
  providers: [GitHub],
  session: { strategy: 'database' },
});

セッション型のカスタマイズ

Auth.jsのセッション型を拡張し、ユーザーIDやロールなどのカスタムフィールドを含めます。

// types/next-auth.d.ts
import { DefaultSession } from 'next-auth';

declare module 'next-auth' {
  interface Session {
    user: { id: string; role: string } & DefaultSession['user'];
  }
}

エラー処理

Auth.jsはデフォルトで、認証に失敗すると/errorへリダイレクトします。app/error/page.tsxを作成すると、エラーページをカスタマイズできます。

理解度チェック

Next.js App RouterでAuth.jsのGETおよびPOSTハンドラーを公開するには、どのファイルを作成する必要がありますか。

まとめ

next-auth@betaをインストールし、プロバイダーとコールバックを含むauth.tsを作成します。app/api/auth/[...nextauth]/route.tsでハンドラーを公開し、AUTH_SECRETとプロバイダー用の環境変数を設定します。Server Componentではauth()でセッションを読み取ります。

無料で開始

AI チューターと学ぶ React — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
88
レッスン
324

よくある質問

「Next.js App RouterでAuth.jsをセットアップ」レッスンは無料ですか?

はい。「Next.js App RouterでAuth.jsをセットアップ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「Next.js App RouterでAuth.jsをセットアップ」で何を学びますか?

Auth.jsをインストールし、route handlersを設定してGitHub OAuth providerを追加します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Next.js App RouterでAuth.jsをセットアップ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Next.js App RouterでAuth.jsをセットアップ
  2. Session管理とuseSession Hook
  3. Credentials Providerとカスタムログイン
  4. Middlewareベースのルート保護
← React Academyに戻る