カスタム UI をローカルでデバッグ・テストする
Logto Cloud ユーザー向けに、「独自の UI を持ち込む」機能を簡単に利用できるようにしました。Cloud ユーザーは、カスタム UI アセットを含む zip ファイルを コンソール > サインイン & アカウント > ブランディング > 独自の UI を持ち込む からアップロードできます(詳細は 独自の UI を持ち込む ページをご覧ください)。
しかし、このようなカスタム UI ページを開発する際には、Logto Cloud へアップロードする前に、ローカルでコードをテスト・デバッグしたい場合があります。この CLI コマンドは、ローカルトンネルをセットアップし、次の 3 つのエンティティを接続するのに役立ちます: Logto Cloud 認証エンドポイント、アプリケーション、カスタムサインイン UI です。
なぜこれが必要なのか?
デフォルトでは、アプリケーションで「サインイン」ボタンをクリックすると、Logto エンドポイントで設定されたサインインページに遷移します。正常なサインインフローは次のように表現できます:
しかし、独自のカスタムサインイン UI を開発している場合は、ローカルマシン上で動作しているカスタムサインイン UI ページへ遷移させる必要があります。 これには、アプリケーションからのリクエストをインターセプトし、カスタムサインイン UI ページへリダイレクトするローカルトンネルサービスが必要です。
さらに、ユーザー認証やセッション管理のために Logto の Experience API とやり取りする必要があります。 このサービスは、CORS 問題を回避するために、Experience API リクエストを Logto Cloud へ転送する役割も果たします。
下記のシーケンス図は、カスタム UI とトンネルサービスを利用した場合の正常な「サインイン」フローを示しています:
このトンネルサービスを利用することで、アセットを毎回 Logto Cloud へアップロードすることなく、ローカルでカスタムサインイン UI を開発・テストできます。
手順
ステップ 1: コマンドを実行する
Cloud テナント ID が foobar で、ローカル開発サーバーでカスタムサインインページが http://localhost:4000 で動作している場合、次のようにコマンドを実行できます:
- CLI
- npx
logto-tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://foobar.logto.app/
npx @logto/tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://foobar.logto.app/
Logto でカスタムドメインを設定している場合も同様に動作します:
- CLI
- npx
logto-tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://your.custom.domain/
npx @logto/tunnel -p 9000 --experience-uri http://localhost:4000/ --endpoint https://your.custom.domain/
また、開発サーバーで実行せずに静的 html アセットにも対応しています。指定したパスに index.html が存在することを確認してください。
- CLI
- npx
logto-tunnel -p 9000 --experience-path /path/to/your/static/files --endpoint https://foobar.logto.app/
npx @logto/tunnel -p 9000 --experience-path /path/to/your/static/files --endpoint https://foobar.logto.app/
ステップ 2: アプリケーションのエンドポイント URI を更新する
最後に、アプリケーションを起動し、Logto エンドポイントをトンネルサービスのアドレス http://localhost:9000/ に設定します。
React アプリケーションの例を示します:
import { LogtoProvider, LogtoConfig } from '@logto/react';
const config: LogtoConfig = {
// endpoint: 'https://foobar.logto.app/', // 元の Logto Cloud エンドポイント
endpoint: 'http://localhost:9000/', // トンネルサービスのアドレス
appId: '<your-application-id>',
};
const App = () => (
<LogtoProvider config={config}>
<YourAppContent />
</LogtoProvider>
);
ソーシャルサインインを利用している場合は、ソーシャルプロバイダーの設定でリダイレクト URI もトンネルサービスのアドレスに更新する必要があります。
http://localhost:9000/callback/<connector-id>
すべて正しく設定されていれば、アプリケーションで「サインイン」ボタンをクリックした際、Logto の組み込み UI ではなくカスタムサインインページに遷移し、Logto Experience API とやり取りできる有効なセッション(クッキー)も利用できます。
開発をお楽しみください!
関連リソース
GitHub Actions ワークフローでカスタムサインイン UI のデプロイを自動化する