Logto は、モダンなアプリや SaaS 製品向けに設計された Auth0 の代替です。 Cloud と オープンソース の両方のサービスを提供し、アイデンティティと管理 (IAM) システムを迅速に立ち上げるのに役立ちます。認証 (Authentication)、認可 (Authorization)、マルチテナント管理を すべて一つに まとめて楽しんでください。
Logto Cloud で無料の開発テナントから始めることをお勧めします。これにより、すべての機能を簡単に探索できます。
この記事では、Next.js (App Router) と Logto を使用して、SMTP サインイン体験(ユーザー認証 (Authentication))を迅速に構築する手順を説明します。
前提条件
- 稼働中の Logto インスタンス。紹介ページ をチェックして始めてください。
- Next.js (App Router) の基本的な知識。
- 使用可能な SMTP アカウント。
Logto にアプリケーションを作成する
Logto は OpenID Connect (OIDC) 認証 (Authentication) と OAuth 2.0 認可 (Authorization) に基づいています。これは、複数のアプリケーション間でのフェデレーテッドアイデンティティ管理をサポートし、一般的にシングルサインオン (SSO) と呼ばれます。
あなたの 従来型 Web アプリケーションを作成するには、次の手順に従ってください:
- Logto コンソール を開きます。「Get started」セクションで、「View all」リンクをクリックしてアプリケーションフレームワークのリストを開きます。あるいは、Logto Console > Applications に移動し、「Create application」ボタンをクリックします。
- 開いたモーダルで、左側のクイックフィルターチェックボックスを使用して、利用可能なすべての "従来型 Web" フレームワークをフィルタリングするか、"従来型 Web" セクションをクリックします。"Next.js (App Router)" フレームワークカードをクリックして、アプリケーションの作成を開始します。
- アプリケーション名を入力します。例:「Bookstore」と入力し、「Create application」をクリックします。
🎉 タダーン!Logto で最初のアプリケーションを作成しました。詳細な統合ガイドを含むお祝いページが表示されます。ガイドに従って、アプリケーションでの体験を確認してください。
Logto SDK を統合する
- サンプルプロジェクトは、私たちの SDK リポジトリ で利用可能です。
- この例は、Next.js の App Router に基づいています。
- チュートリアルビデオは、私たちの YouTube チャンネル で視聴できます。
インストール
お好みのパッケージマネージャーを使用して Logto SDK をインストールします:
- npm
- pnpm
- yarn
npm i @logto/next
pnpm add @logto/next
yarn add @logto/next
設定の準備
Logto クライアントの設定を準備します:
import { LogtoNextConfig } from '@logto/next';
export const logtoConfig: LogtoNextConfig = {
appId: '<your-application-id>',
appSecret: '<your-app-secret-copied-from-console>',
endpoint: '<your-logto-endpoint>', // 例: http://localhost:3001
baseUrl: '<your-nextjs-app-base-url>', // 例: http://localhost:3000
cookieSecret: 'complex_password_at_least_32_characters_long',
cookieSecure: process.env.NODE_ENV === 'production',
};
リダイレクト URI の設定
詳細に入る前に、エンドユーザーの体験について簡単に説明します。サインインプロセスは次のように簡略化できます:
- あなたのアプリがサインインメソッドを呼び出します。
- ユーザーは Logto のサインインページにリダイレクトされます。ネイティブアプリの場合、システムブラウザが開かれます。
- ユーザーがサインインし、あなたのアプリにリダイレクトされます(リダイレクト URI として設定されています)。
リダイレクトベースのサインインについて
- この認証 (Authentication) プロセスは OpenID Connect (OIDC) プロトコルに従い、Logto はユーザーのサインインを保護するために厳格なセキュリティ対策を講じています。
- 複数のアプリがある場合、同じアイデンティティプロバイダー (Logto) を使用できます。ユーザーがあるアプリにサインインすると、Logto は別のアプリにアクセスした際に自動的にサインインプロセスを完了します。
リダイレクトベースのサインインの理論と利点について詳しく知るには、Logto サインイン体験の説明を参照してください。
以下のコードスニペットでは、あなたのアプリが http://localhost:3000/
で実行されていると仮定しています。
リダイレクト URI を設定する
Logto Console のアプリケーション詳細ページに移動します。リダイレクト URI http://localhost:3000/callback
を追加します。

サインインと同様に、ユーザーは共有セッションからサインアウトするために Logto にリダイレクトされるべきです。完了したら、ユーザーをあなたのウェブサイトに戻すと良いでしょう。例えば、http://localhost:3000/
をサインアウト後のリダイレクト URI セクションとして追加します。
その後、「保存」をクリックして変更を保存します。
コールバックの処理
ユーザーがサインインした後、Logto はユーザーを上記で設定したリダイレクト URI に戻します。しかし、アプリケーションが正しく動作するためには、まだ行うべきことがあります。
サインインコールバックを処理するために、handleSignIn
というヘルパー関数を提供しています:
import { handleSignIn } from '@logto/next/server-actions';
import { redirect } from 'next/navigation';
import { NextRequest } from 'next/server';
import { logtoConfig } from '../logto';
export async function GET(request: NextRequest) {
const searchParams = request.nextUrl.searchParams;
await handleSignIn(logtoConfig, searchParams);
redirect('/');
}
サインインとサインアウトの実装
サインインとサインアウトボタンの実装
Next.js App Router では、イベントはクライアントコンポーネントで処理されるため、まず SignIn
と SignOut
の 2 つのコンポーネントを作成する必要があります。
'use client';
type Props = {
onSignIn: () => Promise<void>;
};
const SignIn = ({ onSignIn }: Props) => {
return (
<button
onClick={() => {
onSignIn();
}}
>
Sign In
</button>
);
};
export default SignIn;
'use client';
type Props = {
onSignOut: () => Promise<void>;
};
const SignOut = ({ onSignOut }: Props) => {
return (
<button
onClick={() => {
onSignOut();
}}
>
Sign Out
</button>
);
};
export default SignOut;
これらのコンポーネントがクライアントコンポーネントであることを示すために、ファイルの先頭に 'use client'
を追加することを忘れないでください。
ホームページにボタンを追加
クライアントコンポーネント内でインラインの "use server" 注釈付きサーバーアクションを定義することはできません。サーバーコンポーネントから props を通じて渡す必要があります。
次に、ホームページにサインインとサインアウトのボタンを追加します。必要に応じて SDK のサーバーアクションを呼び出す必要があります。これを支援するために、getLogtoContext
を使用して認証 (Authentication) ステータスを取得します。
import { getLogtoContext, signIn, signOut } from '@logto/next/server-actions';
import SignIn from './sign-in';
import SignOut from './sign-out';
import { logtoConfig } from './logto';
const Home = () => {
const { isAuthenticated, claims } = await getLogtoContext(logtoConfig);
return (
<nav>
{isAuthenticated ? (
<p>
こんにちは, {claims?.sub},
<SignOut
onSignOut={async () => {
'use server';
await signOut(logtoConfig);
}}
/>
</p>
) : (
<p>
<SignIn
onSignIn={async () => {
'use server';
await signIn(logtoConfig);
}}
/>
</p>
)}
</nav>
);
};
export default Home;
チェックポイント: アプリケーションをテストする
これで、アプリケーションをテストできます:
- アプリケーションを実行すると、サインインボタンが表示されます。
- サインインボタンをクリックすると、SDK がサインインプロセスを初期化し、Logto のサインインページにリダイレクトされます。
- サインインすると、アプリケーションに戻り、サインアウトボタンが表示されます。
- サインアウトボタンをクリックして、トークンストレージをクリアし、サインアウトします。
SMTP コネクターを追加する
Email コネクターは、認証 (Authentication) のためにワンタイムパスワード (OTP) を送信するための方法です。これは、Email ベースの登録、サインイン、二要素認証 (2FA)、アカウント回復を含むパスワードレス認証 (Authentication) をサポートするために メールアドレス の確認を可能にします。 Logto の Email コネクターを使用すると、数分でこれを設定できます。
Email コネクターを追加するには、次の手順に従ってください:
- Console > Connector > Email and SMS connectors に移動します。
- 新しい Email コネクターを追加するには、「Set up」ボタンをクリックし、「SMTP」を選択します。
- 選択したプロバイダーの README ドキュメントを確認します。
- 「Parameter Configuration」セクションで設定フィールドを完了します。
- JSON エディターを使用して Email テンプレートをカスタマイズします。
- メールアドレス に確認コードを送信して設定をテストします。

インプレースコネクターガイドに従っている場合は、次のセクションをスキップできます。
SMTP メールコネクター を設定する
SMTP コネクターの設定
SMTP は、特定のメールサービスプロバイダー専用の転送プロトコルではなく、すべてのプロバイダーで利用できます。
より理解を深めていただくために、以下のプロバイダーで SMTP コネクターを使用してメールを送信する方法のガイドを提供しています:
- Gmail は世界で最も人気のあるメールサービスベンダーです。
- Aliyun direct mail および SendGrid mail。これら 2 つのメールサービスプロバイダーについては、Logto チームが対応するコネクターを提供しているため、一般的なイメージを持っている方もいるでしょう。
以下の例を参考に、他のメールベンダーのセットアップも理解できることを願っています 🚀
Gmail 用の設定
Gmail で新しい Gmail アカウントを取得するか、既存のアカウントをお持ちの場合はそれを使用できます。
Gmail 公式記事 では、SMTP コネクターを介して Gmail を操作するために必要なプロパティ値の決定方法が示されています。
SendGrid SMTP API との統合
最初に、SendGrid アカウントをすでにお持ちであることを前提とします。まだの場合は、 SendGrid ウェブサイト で新しいアカウントを作成してください。
"Integrating with the SMTP API" でステップバイステップのガイドを確認できます。
開発者は "Sender Management" で sender の詳細にアクセスできます。
Aliyun direct mail アカウントでの設定
Aliyun ウェブサイト にサインインしてください。アカウントをお持ちでない場合は新規登録してください。
SMTP を使用してメールを送信するガイド に従い、必要な設定や情報を取得するための「タスク」を完了してください。
SMTP サービスアドレスページ で、適切な SMTP サービスアドレスのホストとポート番号を選択できます。
「送信者アドレス」を確認するには、 DirectMail コンソール の左側ナビゲーションペインからアクセスできます。ここで Sender address
と SMTP Password
を確認できます。
前述のケースではシンプルにするため、サンプルテンプレートは 1 つのみ提供しています。他のユースケース用にテンプレートを追加してください。
"<" と ">" で囲まれた値は、ご自身の Gmail、SendGrid、または Aliyun アカウント設定に合わせて変更し、それ以外のフィールドはそのままにしてください。
テンプレートの内容に {{code}}
をプレースホルダーとして追加すると、送信メール内でランダムな認証コードを表示できます。
SMTP コネクターのテスト
メールアドレスを入力し、「送信」をクリックして、設定が機能するかどうかを「保存して完了」前に確認できます。
以上です。 サインイン体験でコネクターを有効化 するのをお忘れなく。
設定タイプ
Name | Type |
---|---|
host | string |
port | string |
fromEmail | string |
templates | Template[] |
Template Properties | Type | Enum values |
---|---|---|
subject | string | N/A |
content | string | N/A |
usageType | enum string | 'Register' / 'SignIn' / 'ForgotPassword' / 'Generic' |
contentType | enum string | 'text/plain' / 'text/html' |
ユーザー名とパスワード認証オプション
Name | Type | Enum values |
---|---|---|
user | string | N/A |
pass | string | N/A |
type | enum string (OPTIONAL) | 'login' |
OAuth2 認証オプション やその他の高度な設定も可能です。詳細は こちら をご覧ください。
すべての設定可能なパラメーターを含むサンプル設定例をテキストボックス内に記載しています。ご自身の設定に合わせてご利用ください。(設定内容はご自身で責任を持ってください。一部の値はデモ用であり、実際のユースケースに適合しない場合があります。)
設定を保存する
Logto コネクター設定エリアで必要な値をすべて記入したことを確認してください。「保存して完了」または「変更を保存」をクリックすると、SMTP コネクターが利用可能になります。
サインイン体験で SMTP コネクターを有効にする
コネクターを正常に作成したら、電話番号ベースのパスワードレスログインと登録を有効にできます。
- コンソール > サインイン体験 > サインアップとサインイン に移動します。
- サインアップ方法を設定します(オプション):
- サインアップ識別子として "メールアドレス" または "Email or phone number" を選択します。
- "Verify at sign-up" は強制的に有効化されます。登録時に "Create a password" を有効にすることもできます。
- サインイン方法を設定します:
- サインイン識別子の一つとして メールアドレス を選択します。複数の利用可能な識別子(メール、電話番号、ユーザー名)を提供できます。
- 認証 (Authentication) 要素として "Verification code" および / または "Password" を選択します。
- "Save changes" をクリックし、"Live preview" でテストします。

OTP を使用した登録とログインに加えて、パスワードの回復や ベースのセキュリティ検証を有効にし、メールアドレス をプロファイルにリンクすることもできます。詳細については、エンドユーザーフロー を参照してください。
テストと検証
Next.js (App Router) アプリに戻ります。これで SMTP を使用してサインインできるはずです。お楽しみください!
さらなる読み物
エンドユーザーフロー:Logto は、MFA やエンタープライズシングルサインオン (SSO) を含む即時使用可能な認証 (Authentication) フローを提供し、アカウント設定、セキュリティ検証、マルチテナント体験の柔軟な実装のための強力な API を備えています。
認可 (Authorization):認可 (Authorization) は、ユーザーが認証 (Authentication) された後に行えるアクションやアクセスできるリソースを定義します。ネイティブおよびシングルページアプリケーションの API を保護し、ロールベースのアクセス制御 (RBAC) を実装する方法を探ります。
組織 (Organizations):特にマルチテナント SaaS や B2B アプリで効果的な組織機能は、テナントの作成、メンバー管理、組織レベルの RBAC、およびジャストインタイムプロビジョニングを可能にします。
顧客 IAM シリーズ:顧客(または消費者)アイデンティティとアクセス管理に関する連続ブログ投稿で、101 から高度なトピックまでを網羅しています。