Logto 認証を Next.js アプリケーションに Server Actions を使用して追加する
Server Actions を使用して Logto 認証を Next.js アプリケーションに統合します。
Server Actions は、従来の REST API を必要とせずに強力な Web アプリケーションを作成するための新しいアプローチを提案します。以前、私たちの記事でこのことについて話しました。
今日は実験的な機能であるにもかかわらず、私たちの Next.js SDK に Server Actions の公式サポートを発表できることを大変嬉しく思います。
簡単な概要については、このサンプルをチェックし、このガイドで Logto を Server Actions と統合する方法を詳述する過程を辿ってください。
前提条件
開始するには、以下のものを確認してください:
- 実行中の Logto インスタンスまたは Logto Cloud アカウントへのアクセス。
- Server Actions 機能が有効な Next.js プロジェクト。
Logto の設定
Logto をセルフホストしている場合、Logto インスタンスをセットアップするには、Logto の「Get started」ドキュメントを参照してください。
Logto Cloud を使用している場合は、URL https://cloud.logto.io/ を入力して Logto Console を開くか、セルフホスティング用に設定したエンドポイントを開きます。
次に、「Applications」タブに移動して、「Create application」をクリックします。

現れるモーダルで、「Next.js (App Router)」を選択し、「Next.js App」などのアプリケーション名を入力します。それから「Create application」をクリックします。

Logto のチュートリアルページにリダイレクトされます。「Finish and done」をクリックして Application details ページに進みます。

「Redirect URIs」セクションで、次の値を入力します:
たとえば、Next.js を http://localhost:3000 でホスティングしている場合、値は次のようになります:

「Save Changes」ボタンを下部にあるときにクリックします。成功すると、Next.js の設定時に役立つのでこのページを開いたままにしておきます。
Next.js アプリケーションのセットアップ
最新バージョンの Next.js を使用したプロジェクトがあることを確認してください。まだない場合は、公式インストールガイドに従って作成できます。
このガイドを作成している時点では、機能は実験的であり、next.config.js でのアクティベーションが必要です。
Logto ライブラリの定義
まず @logto/next モジュールを npm を使ってインストールします:
または yarn や pnpm を使用することもできます。
次に「server actions」としていくつかの関数を作成します、新しいファイル libraries/logto.ts: を作成してください。
このファイルでは、認証目的で 4 つの関数をエクスポートします。最初の行 "use server" に注意してください。このファイルのコードはサーバーサイドでのみ実行できます。クッキーに基づくセッションを管理するために "next/headers" を使用します。
"user server"のリファレンス: https://react.dev/reference/react/use-server- クッキー管理に
"next/headers"を使用するためのリファレンス: https://nextjs.org/docs/api-reference/next/headers
エクスポートされたこれらの関数は、クライアントサイドの React コンポーネントから直接呼び出すことができます。これが Server Actions を使用する主な利点です。次の章に進んで、これらの関数をどのように使用するかを見てみましょう。
サインインとサインアウトボタンの実装
認証関数が揃ったので、ページを構築しましょう。サインインとサインアウトアクションを開始するための 2 つのクライアントコンポーネントを作成します。
サインイン
/app/sign-in.tsx:
ここでは、前の章で定義した signIn 関数をインポートしています。コードはサーバーサイドで実行されますが、この関数はユーザーがサインインボタンをクリックしたときに <button> コンポーネントから直接呼び出すことができます。これにより、サインインプロセスを処理するための REST APIを書く必要がなくなります。実際、Next.js が私たちのために "POST" リクエストディスパッチャーの詳細を処理します。redirectUrl を受け取ると、router.push を呼び出して Logto サインインページにリダイレクトできます。
サインアウト
/app/sign-out.tsx:
サインアウトプロセスはサインインプロセスと似ています。
コールバックページの準備
標準の OIDC アイデンティティプロバイダーとして、Logto は認証後にユーザーをコールバック URL にリダイレクトします。そのため、サインイン結果を処理するコールバックページを準備する必要があります。
/app/callback/page.tsx
ここでは useEffect を持つクライアントコンポーネントを使用しており、表示しやすく、より良いユーザーエクスペリエンスのために「読み込み中」ページを表示します。
ユーザーコンテキストの表示と安全なページ
では、Logto SDK の有用性を示すために最小限のホームページを作成しましょう。isAuthenticated 値を確認して、サインインページへのリダイレクトやエラーメッセージの表示など、未知のユーザーから任意のリソースを必要に応 じて保護します。
app/page.tsx
お分かりのように、これは useEffect や複雑な状態変更を管理する必要がない server component です。
結論
Server actions は、REST API に依存する従来の Next.js アプリケーションと比較して、認証を実装するための合理化され、シンプルな方法を提供します。
サンプル全体のコードは、このリポジトリにあります: https://github.com/logto-io/js/tree/master/packages/next-server-actions-sample
Logto Cloud を試してみて、その簡単さを体感してください。

