• nextjs
  • app-router
  • server-actions
  • sdk

Logto 認証を Next.js アプリケーションに Server Actions を使用して追加する

Server Actions を使用して Logto 認証を Next.js アプリケーションに統合します。

Sijie
Sijie
Developer

ユーザー認証に何週間も費やすのはもうやめましょう
Logto でより速く安全なアプリをリリース。数分で認証を統合し、コア製品に集中できます。
始めましょう
Product screenshot

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」をクリックします。

Applications tab

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

Create application

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

Applications details

「Redirect URIs」セクションで、次の値を入力します:

たとえば、Next.js を http://localhost:3000 でホスティングしている場合、値は次のようになります:

Save changes

「Save Changes」ボタンを下部にあるときにクリックします。成功すると、Next.js の設定時に役立つのでこのページを開いたままにしておきます。

Next.js アプリケーションのセットアップ

最新バージョンの Next.js を使用したプロジェクトがあることを確認してください。まだない場合は、公式インストールガイドに従って作成できます。

このガイドを作成している時点では、機能は実験的であり、next.config.js でのアクティベーションが必要です。

Logto ライブラリの定義

まず @logto/next モジュールを npm を使ってインストールします:

または yarnpnpm を使用することもできます。

次に「server actions」としていくつかの関数を作成します、新しいファイル libraries/logto.ts: を作成してください。

このファイルでは、認証目的で 4 つの関数をエクスポートします。最初の行 "use server" に注意してください。このファイルのコードはサーバーサイドでのみ実行できます。クッキーに基づくセッションを管理するために "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 を試してみて、その簡単さを体感してください。