コンテンツにスキップ
NextAuth.js v4から移行しますか?お読みください 移行ガイド.
ガイドOAuthのためのGitHubの設定

GitHubを使ったOAuth

このチュートリアルでは、GitHubでログインできるように、Next.jsアプリケーションにAuth.jsを設定します。

このチュートリアルでは、OAuthプロバイダーとしてGitHubを、フレームワークとしてNext.jsを使用します。OAuthプロバイダーまたはフレームワークに関わらず、プロセスは同じ/非常に似ています。主に、選択したプロバイダーのダッシュボードでアプリケーションを登録する方法が異なります。

Auth.jsの設定

Auth.jsとNext.jsのインストール

このチュートリアルでは、デフォルトのAuth.jsとNext.jsのサンプルアプリを使用します。既存のNext.jsアプリが既にある場合は、それも機能するはずです。ない場合は、リポジトリをクローンしてください

git clone https://github.com/nextauthjs/next-auth-example.git && cd next-auth-example

サンプルアプリを使用している場合、Auth.jsは既にインストールされています。そうでない場合は、インストール手順に従ってください。

サーバー設定の作成

次に、Auth.jsに必要な設定と動的ルートハンドラーを含む、Auth.jsのメイン設定ファイルを作成します。

./auth.ts
import NextAuth from "next-auth"
import GitHub from "next-auth/providers/github"
 
export const { handlers, auth } = NextAuth({
  providers: [GitHub],
})
./app/api/auth/[...nextauth]/route.ts
import { handlers } from "@/auth" // Referring to the auth.ts we just created
export const { GET, POST } = handlers
export const runtime = "edge" // optional

これはキャッチオール動的ルートであるため、関連するすべてのAuth.js APIルートに応答し、アプリケーションはOAuth 2プロトコルを使用して選択したOAuthプロバイダーと対話できます。

環境変数の追加

インストールセクションで説明されているように、.env.localファイルを作成し、次の2つのGitHub変数を追加します

.env.local
AUTH_SECRET="changeMe"
 
AUTH_GITHUB_ID=
AUTH_GITHUB_SECRET=

GitHubでアプリケーションを登録したら、AUTH_GITHUB_IDAUTH_GITHUB_SECRETにGitHubデベロッパーポータルからの適切な値を入力します。

アプリの登録

GitHubでのOAuthアプリの作成

GitHubから必要な認証情報を取得するには、開発者設定でアプリケーションを作成する必要があります。

設定開発者OAuthアプリにあるGitHub開発者設定に移動し、「新しいOAuthアプリ」をクリックします

Creating an OAuth App on GitHub

次に、アプリケーションを登録するための画面が表示されます。必要なすべてのフィールドに入力してください。

デフォルトのコールバックURLは、一般的に[origin]/api/auth/callback/[provider]の形式になりますが、使用しているフレームワークによってデフォルトがわずかに異なります。

// Local
http://localhost:3000/api/auth/callback/github
 
// Prod
https://app.company.com/api/auth/callback/github

必要なフィールドをすべて入力したら、「アプリケーションの登録」を押します。

シークレット

アプリケーションの登録が完了すると、GitHubに必要な詳細が表示されます。

Generating clientId and clientSecret

この画面からは、クライアントIDクライアントシークレットの2つが必要です。

クライアントIDは常に表示されます。これは、GitHub内でのOAuthアプリケーションのパブリック識別子です。

クライアントシークレットを取得するには、「新しいクライアントシークレットを生成する」をクリックする必要があります。これにより、最初のクライアントシークレットが作成されます。最初のクライアントシークレットが漏洩、紛失などした場合に備えて、ここで簡単に新しいクライアントシークレットを作成できます。

💡

クライアントシークレットは安全に保管し、公開したり、組織外の人と共有したりしないでください。

すべてを連携させる

必要なクライアントIDとクライアントシークレットを取得したので、それらを先ほど作成した.env.localファイルに貼り付けます。

.env.local
AUTH_SECRET="changeMe"
 
AUTH_GITHUB_ID={clientId}
AUTH_GITHUB_SECRET={clientSecret}

すべての準備が整ったので、ローカル開発サーバーを起動してログインプロセスをテストできます。

npm run dev

http://localhost:3000に移動します。次のページが表示されます

App Start

「サインイン」をクリックすると、デフォルトのAuth.jsサインインページにリダイレクトされます。必要に応じて、このページをカスタマイズできます。次に、「GitHubでサインイン」をクリックします。Auth.jsはGitHubにリダイレクトし、GitHubはアプリケーションを認識して、資格情報を入力することで新しいアプリケーションへの認証を確認するようにユーザーに求めます。

GitHub Credentials

認証されると、GitHubはユーザーをアプリにリダイレクトし、Auth.jsが残りの処理を行います

GitHub Authentication Success

ここにリダイレクトされた場合は、すべてがうまくいったことを意味します!ユーザーがGitHub経由でアプリケーションにログインできるように、OAuth認証フロー全体が完了しました!

ご覧のとおり、アプリケーションでOAuthを設定するのに必要な時間のほとんどは、OAuthプロバイダーのダッシュボードでアプリケーションを登録するのに費やされます(ナビゲートしやすいものもあれば、難しいものもあります)。登録が完了したら、Auth.jsを介した設定は簡単です。

デプロイ

アプリを本番環境にリリースする前に、いくつかの変更を行う必要があります。

残念ながら、GitHubは1つのアプリケーションに複数のコールバックURLを登録できないプロバイダーの1つです。したがって、前に行ったように、GitHubのダッシュボードで別のアプリケーションを登録する必要がありますが、コールバックURLをアプリケーションの本番ドメイン(例:https://example.com/api/auth/callback/github)に設定する必要があります。次に、ホスティングプロバイダーのダッシュボード(Vercel、Netlify、Cloudflareなど)または本番環境で環境変数を管理する方法を通じて、本番環境に追加する必要がある新しいクライアントIDクライアントシークレットも取得します。

詳細については、デプロイメントページを参照してください。

Auth.js © Balázs Orbán and Team -2024