メインコンテンツまでスキップ
新しい友達のために:

Logto は、モダンなアプリや SaaS 製品向けに設計された Auth0 の代替です。 Cloudオープンソース の両方のサービスを提供し、アイデンティティと管理 (IAM) システムを迅速に立ち上げるのに役立ちます。認証 (Authentication)、認可 (Authorization)、マルチテナント管理を すべて一つに まとめて楽しんでください。

Logto Cloud で無料の開発テナントから始めることをお勧めします。これにより、すべての機能を簡単に探索できます。

この記事では、Next.js (Pages Router)Logto を使用して、SMTP サインイン体験(ユーザー認証 (Authentication))を迅速に構築する手順を説明します。

前提条件

  • 稼働中の Logto インスタンス。紹介ページ をチェックして始めてください。
  • Next.js (Pages Router) の基本的な知識。
  • 使用可能な SMTP アカウント。

Logto にアプリケーションを作成する

Logto は OpenID Connect (OIDC) 認証 (Authentication) と OAuth 2.0 認可 (Authorization) に基づいています。これは、複数のアプリケーション間でのフェデレーテッドアイデンティティ管理をサポートし、一般的にシングルサインオン (SSO) と呼ばれます。

あなたの Traditional web アプリケーションを作成するには、次の手順に従ってください:

  1. Logto コンソール を開きます。「Get started」セクションで、「View all」リンクをクリックしてアプリケーションフレームワークのリストを開きます。あるいは、Logto Console > Applications に移動し、「Create application」ボタンをクリックします。 Get started
  2. 開いたモーダルで、左側のクイックフィルターチェックボックスを使用して、利用可能なすべての "Traditional web" フレームワークをフィルタリングするか、"Traditional web" セクションをクリックします。"Next.js" フレームワークカードをクリックして、アプリケーションの作成を開始します。 Frameworks
  3. アプリケーション名を入力します。例:「Bookstore」と入力し、「Create application」をクリックします。

🎉 タダーン!Logto で最初のアプリケーションを作成しました。詳細な統合ガイドを含むお祝いページが表示されます。ガイドに従って、アプリケーションでの体験を確認してください。

Logto SDK を統合する

ヒント:
  • サンプルプロジェクトは、私たちの SDK リポジトリ で利用可能です。
  • この例は、Next.js の Pages Router に基づいています。

インストール

お好みのパッケージマネージャーを使用して Logto SDK をインストールします:

npm i @logto/next

統合

LogtoClient を初期化する

LogtoClient をインポートして初期化します:

libraries/logto.ts
import LogtoClient from '@logto/next';

export const logtoClient = new LogtoClient({
appId: '<your-application-id>',
appSecret: '<your-app-secret-copied-from-console>',
endpoint: '<your-logto-endpoint>', // 例: http://localhost:3001
baseUrl: 'http://localhost:3000',
cookieSecret: 'complex_password_at_least_32_characters_long',
cookieSecure: process.env.NODE_ENV === 'production',
});

リダイレクト URI を設定する

詳細に入る前に、エンドユーザーの体験について簡単に説明します。サインインプロセスは次のように簡略化できます:

  1. あなたのアプリがサインインメソッドを呼び出します。
  2. ユーザーは Logto のサインインページにリダイレクトされます。ネイティブアプリの場合、システムブラウザが開かれます。
  3. ユーザーがサインインし、あなたのアプリにリダイレクトされます(リダイレクト URI として設定されています)。

リダイレクトベースのサインインについて

  1. この認証 (Authentication) プロセスは OpenID Connect (OIDC) プロトコルに従い、Logto はユーザーのサインインを保護するために厳格なセキュリティ対策を講じています。
  2. 複数のアプリがある場合、同じアイデンティティプロバイダー (Logto) を使用できます。ユーザーがあるアプリにサインインすると、Logto は別のアプリにアクセスした際に自動的にサインインプロセスを完了します。

リダイレクトベースのサインインの理論と利点について詳しく知るには、Logto サインイン体験の説明を参照してください。


注記:

以下のコードスニペットでは、あなたのアプリが http://localhost:3000/ で実行されていると仮定しています。

リダイレクト URI を設定する

Logto Console のアプリケーション詳細ページに移動します。リダイレクト URI http://localhost:3000/api/logto/sign-in-callback を追加します。

Logto Console のリダイレクト URI

サインインと同様に、ユーザーは共有セッションからサインアウトするために Logto にリダイレクトされるべきです。完了したら、ユーザーをあなたのウェブサイトに戻すと良いでしょう。例えば、http://localhost:3000/ をサインアウト後のリダイレクト URI セクションとして追加します。

その後、「保存」をクリックして変更を保存します。

API ルートを準備する

Logto と接続するための API ルート を準備します。

IDE / エディタに戻り、まず次のコードを使用して API ルートを実装します:

pages/api/logto/[action].ts
import { logtoClient } from '../../../libraries/logto';

export default logtoClient.handleAuthRoutes();

これにより、4 つのルートが自動的に作成されます:

  1. /api/logto/sign-in: Logto でサインインします。
  2. /api/logto/sign-in-callback: サインインコールバックを処理します。
  3. /api/logto/sign-out: Logto でサインアウトします。
  4. /api/logto/user: ユーザーが Logto で認証されているかどうかを確認し、認証されている場合はユーザー情報を返します。

サインインとサインアウトを実装する

API ルートを準備しましたので、次にホームページにサインインとサインアウトボタンを実装しましょう。必要に応じて、ユーザーをサインインまたはサインアウトルートにリダイレクトする必要があります。これを支援するために、useSWR を使用して /api/logto/user から認証 (Authentication) ステータスを取得します。

useSWR について詳しくは このガイド をご覧ください。

/pages/index.tsx
import { type LogtoContext } from '@logto/next';
import useSWR from 'swr';

const Home = () => {
const { data } = useSWR<LogtoContext>('/api/logto/user');

return (
<nav>
{data?.isAuthenticated ? (
<p>
こんにちは、{data.claims?.sub} さん、
<button
onClick={() => {
window.location.assign('/api/logto/sign-out');
}}
>
サインアウト
</button>
</p>
) : (
<p>
<button
onClick={() => {
window.location.assign('/api/logto/sign-in');
}}
>
サインイン
</button>
</p>
)}
</nav>
);
};

export default Home;

チェックポイント: アプリケーションをテストする

これで、アプリケーションをテストできます:

  1. アプリケーションを実行すると、サインインボタンが表示されます。
  2. サインインボタンをクリックすると、SDK がサインインプロセスを初期化し、Logto のサインインページにリダイレクトされます。
  3. サインインすると、アプリケーションに戻り、サインアウトボタンが表示されます。
  4. サインアウトボタンをクリックして、トークンストレージをクリアし、サインアウトします。

SMTP コネクターを追加する

Email コネクターは、認証 (Authentication) のためにワンタイムパスワード (OTP) を送信するための方法です。これは、Email ベースの登録、サインイン、二要素認証 (2FA)、アカウント回復を含むパスワードレス認証 (Authentication) をサポートするために メールアドレス の確認を可能にします。 Logto の Email コネクターを使用すると、数分でこれを設定できます。

Email コネクターを追加するには、次の手順に従ってください:

  1. Console > Connector > Email and SMS connectors に移動します。
  2. 新しい Email コネクターを追加するには、「Set up」ボタンをクリックし、「SMTP」を選択します。
  3. 選択したプロバイダーの README ドキュメントを確認します。
  4. 「Parameter Configuration」セクションで設定フィールドを完了します。
  5. JSON エディターを使用して Email テンプレートをカスタマイズします。
  6. メールアドレス に確認コードを送信して設定をテストします。
Connector tab
注記:

インプレースコネクターガイドに従っている場合は、次のセクションをスキップできます。

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 addressSMTP Password を確認できます。

注記:

前述のケースではシンプルにするため、サンプルテンプレートは 1 つのみ提供しています。他のユースケース用にテンプレートを追加してください。 "<" と ">" で囲まれた値は、ご自身の Gmail、SendGrid、または Aliyun アカウント設定に合わせて変更し、それ以外のフィールドはそのままにしてください。 テンプレートの内容に {{code}} をプレースホルダーとして追加すると、送信メール内でランダムな認証コードを表示できます。

SMTP コネクターのテスト

メールアドレスを入力し、「送信」をクリックして、設定が機能するかどうかを「保存して完了」前に確認できます。

以上です。 サインイン体験でコネクターを有効化 するのをお忘れなく。

設定タイプ

NameType
hoststring
portstring
fromEmailstring
templatesTemplate[]
Template PropertiesTypeEnum values
subjectstringN/A
contentstringN/A
usageTypeenum string'Register' / 'SignIn' / 'ForgotPassword' / 'Generic'
contentTypeenum string'text/plain' / 'text/html'

ユーザー名とパスワード認証オプション

NameTypeEnum values
userstringN/A
passstringN/A
typeenum string (OPTIONAL)'login'

OAuth2 認証オプション やその他の高度な設定も可能です。詳細は こちら をご覧ください。

すべての設定可能なパラメーターを含むサンプル設定例をテキストボックス内に記載しています。ご自身の設定に合わせてご利用ください。(設定内容はご自身で責任を持ってください。一部の値はデモ用であり、実際のユースケースに適合しない場合があります。)

設定を保存する

Logto コネクター設定エリアで必要な値をすべて記入したことを確認してください。「保存して完了」または「変更を保存」をクリックすると、SMTP コネクターが利用可能になります。

サインイン体験で SMTP コネクターを有効にする

コネクターを正常に作成したら、電話番号ベースのパスワードレスログインと登録を有効にできます。

  1. コンソール > サインイン体験 > サインアップとサインイン に移動します。
  2. サインアップ方法を設定します(オプション):
    1. サインアップ識別子として "メールアドレス" または "Email or phone number" を選択します。
    2. "Verify at sign-up" は強制的に有効化されます。登録時に "Create a password" を有効にすることもできます。
  3. サインイン方法を設定します:
    1. サインイン識別子の一つとして メールアドレス を選択します。複数の利用可能な識別子(メール、電話番号、ユーザー名)を提供できます。
    2. 認証 (Authentication) 要素として "Verification code" および / または "Password" を選択します。
  4. "Save changes" をクリックし、"Live preview" でテストします。
Sign-in Experience tab

OTP を使用した登録とログインに加えて、パスワードの回復や ベースのセキュリティ検証を有効にし、メールアドレス をプロファイルにリンクすることもできます。詳細については、エンドユーザーフロー を参照してください。

テストと検証

Next.js (Pages Router) アプリに戻ります。これで SMTP を使用してサインインできるはずです。お楽しみください!

さらなる読み物

エンドユーザーフロー:Logto は、MFA やエンタープライズシングルサインオン (SSO) を含む即時使用可能な認証 (Authentication) フローを提供し、アカウント設定、セキュリティ検証、マルチテナント体験の柔軟な実装のための強力な API を備えています。

認可 (Authorization):認可 (Authorization) は、ユーザーが認証 (Authentication) された後に行えるアクションやアクセスできるリソースを定義します。ネイティブおよびシングルページアプリケーションの API を保護し、ロールベースのアクセス制御 (RBAC) を実装する方法を探ります。

組織 (Organizations):特にマルチテナント SaaS や B2B アプリで効果的な組織機能は、テナントの作成、メンバー管理、組織レベルの RBAC、およびジャストインタイムプロビジョニングを可能にします。

顧客 IAM シリーズ:顧客(または消費者)アイデンティティとアクセス管理に関する連続ブログ投稿で、101 から高度なトピックまでを網羅しています。