post-login)トリガーに関連付ける必要があります。以下の手順に従い、アクションを元のルールと同じ順序にしておくと、機能は同じになります。
移行を計画する
Post-Loginアクションは既存のルールの後に実行されるため、Dashboardでルールを一度に1つずつ変換することも、 を使用して一度にすべてを変換することもできます。 コードを変換してから、アクションをアクティブにし、ルールを非アクティブにする必要があります。アクションの有効化とルールの無効化は、連続してすばやく実行できますが、順序によっては、両方が実行されない、またはどちらも実行されない時間が短期間発生する場合があります。 このため、パイプラインを段階的に移行することをお勧めします。ルールコードの一部をアクションコードに変換し、ステージング環境でテストしてから、一度に1つずつライブに移行します。アクティブなルールはデプロイされたアクションの前に実行されるため、ルールパイプラインの最後から開始して逆方向に作業すると、アクションで他のロジックを構築およびテストするときに、一部のロジックをルールに保持したままにすることができます。移行を計画するときのヒント
- アクションとルールを1対1にして、機能のオン・オフやテストをひとまとめに実行できるようにします。
- ユーザーメタデータにフラグを使って、コストがかかる操作や1回限りの操作が重複しないようにします。
- Rulesのパイプラインの最後から始めて、逆方向に作業します。アクティブなRulesはアクションのデプロイ前に実行されるため、構築の際にはRules内にいくつかのロジックを維持させて、他のロジックをActionsでテストすることができます。
- 変更は、影響やトラフィックが最も少ない時間帯や時期に行います。
- 移行期間が無効なログインや保護の欠落に繋がるようであれば、一時的にログインページをカスタマイズして、ログインを停止することを検討します。
- 移行のスクリプトを作成し、一括または繰り返してテストと実装が行えるように、Auth0 Deploy CLIの使用を考慮します。
制限事項を理解する
アクションはルールでできることの大部分を処理できますが、移行を開始する前にいくつかの制限事項に注意する必要があります(注:フックとアクションはどちらも移行中に実行できます)。- アクションには、ルールの場合のように、Management APIのアクセストークンやグローバル
auth0オブジェクトへのアクセスは提供されません。Management API呼び出しを引き続き行う方法については、「コードの変換」セクションを参照してください。
コードを変換する
ルールをアクションに変換するには、ルール固有のコードをアクションコードに置き換える必要があります。このセクションでは、機能するルールを同等のアクションに変換するためのタスクについて説明します。コードを変換するときのヒント
- 一般的に、Actionsの
eventオブジェクトについて、Rulesのuserとcontextオブジェクトの読み取り専用プロパティを確認します。apiオブジェクトの機能について、Actionsがシステムに及ぼす副次的な影響(ログインの失敗、ユーザーメタデータの更新など)を確認します。 - コードを書くときは、Auth0 DashboardのActions Code Editorを使います。エラーがハイライトされたり、オートコンプリート機能によって提案が自動入力されたりするので、便利です。
- 稼働させる前に、新しいActionsのテストをステージング環境やテスト環境で念入りに行います。
ルールコードを新しいアクションにコピーする
ルールのコードを新しいアクションにコピーし、Auth0 DashboardのActionsコードエディターで使用することをお勧めします。コードにある未解決の問題が特定できます。
- 運用テナントにログインし、変換元となるルールのコードをコピーします。
- 非運用テナントに切り替えて、[Auth0 Dashboard] > [Actions(アクション)] > [Library(ライブラリ)]に移動します。
-
[Build Custom(カスタムの構築)] を選択した後、
- 変換するルールの名前と一致するアクションの 名前 を入力します。
- トリガー を見つけて、 ログイン/ログイン 後を選択します。
- [Runtime(ランタイム)] で、 [Node 22] を選択します。
- [Create(作成)] を選択します。
-
アクションコードエディターのコードブロックで、エクスポートされた
onExecutePostLogin関数の下に変換するルールコードを貼り付けます。 - コードを関数に移動するときに、この記事で後述している変更を加えます。
関数宣言を変更する
ルールは、ユーザー、コンテキスト、およびコールバックパラメータを持つ単純な宣言済み関数を使用しますが、アクションは特定の名前にエクスポートされた関数を使用します。以下の変更を加えます。現在のところ、表示されるエラーは無視してください。
変更前
ユーザーデータへのアクセス方法を変更する
ルールでは、ログインするユーザーに関するデータはuserオブジェクトに保存されます。アクションでは、このデータはeventオブジェクトのuserプロパティにあります。既存のプロパティの大部分は、この新しい場所でアクセスできます。
eventオブジェクトのプロパティで保管・変更されたデータは、他のアクションでは使用できません。コンテキストデータへのアクセス方法を変更する
ルールでは、現在のログインセッションに関するデータはcontextオブジェクトに保存されます。アクションの場合、このデータは再形成され、eventオブジェクトに移動されました。プロパティの多くはそのまま移行されましたが、わかりやすくするために一部が結合されました。
eventオブジェクトのプロパティで保管・変更されたデータは、他のアクションでは使用できません。context.idTokenやcontext.multifactorなど、プロパティにデータを設定することでルールがコア機能をトリガーする場合は、そのようなユースケースについて説明している以下のセクションをお読みください。依存関係を変換する
ルールには、requireステートメントにバージョン番号を含めることを要求する方法で依存関係が含まれます。アクションでは、より標準的なCommonJS構文が使用され、コードエディターの外部でバージョンを示す必要があります。
ルールでは、特定のパッケージの特定のバージョンのみが許可され、新しいパッケージとバージョンを追加するにはAuth0への要求が必要です。アクションでは、npmレジストリで利用可能な任意のパッケージを要求できます。
npmモジュールが最新バージョンでないなら、今こそアップデートする絶好の機会です!- ルールコード内で
requireステートメントを検索します。 - バージョン番号を削除しますが、これらの番号はメモしておいてください。
- 依存関係がコアNodeJSモジュールでない場合は、「初めてアクションを作成する」の「依存関係を追加する」セクションの手順に従って依存関係を追加してください。依存関係がコアNodeJSモジュールである場合は、追加する必要はありません。
- 見つかった
requireステートメントをfunction宣言の外に移動します:
コールバックを変換する
ルールの処理が完了したら、callback()関数を呼び出して、ログインに失敗した場合はエラーを渡す必要があります。逆に、アクションは成功時に返したり、ログインに失敗した場合はメッセージとともにapiメソッドを呼び出したりできます。ルール内のcallback()のすべてのインスタンスは削除するか、失敗した場合はapi.access.deny()に置き換える必要があります。ルールとアクションの両方で、特定の条件で処理を停止する必要がある場合は、returnステートメントを使用します。
変更前
シークレットの処理を変更する
ルールでは、構成値をグローバルに設定します。これは、すべてのルールがすべてのシークレット値にアクセスできることを意味します(詳細については、「ルールの構成を保管する」を参照してください)。アクションでは、個々のアクションごとに構成値を設定します。アクションのコンテキスト外からアクションのシークレット値にアクセスすることはできません。 シークレットをルールからアクションに変換するには:- 操作中の特定のアクションに必要な値を保存します。
- アクション内からアクセスする必要がある値ごとにシークレットを追加します。方法については、「初めてアクションを作成する」の「 シークレットを追加する 」セクションをお読みください。
- コードを変換します。
カスタムクレームをトークンに変換する
ルールとアクションでは共に、カスタムクレームをIDトークンおよびアクセストークンに追加できます。ルールでは、これはcontextオブジェクトのプロパティですが、アクションではapiオブジェクトのメソッドが使用されます。
変更前
多要素トリガーを変換する
ルールでは、contextオブジェクトのmultifactorプロパティを変更することで、多要素認証をトリガーできます。アクションでは、これはapiオブジェクトのメソッドを使用して実行されます。
変更前
ユーザーメタデータの更新を変換する
ルール内のuser_metadataプロパティとapp_metadataプロパティを更新するには、Management APIの呼び出しが必要であり、レート制限エラーが発生する可能性があります。ただし、アクションは複数のユーザーメタデータの変更を示す方法を提供しますが、Management APIを呼び出すのは1回だけです。
変更前
api.user.setUserMetadataまたはapi.user.setAppMetadataを呼び出す必要があります。アクションでは、1つまたは複数のアクションにわたってこれらの関数を複数回呼び出すと、フローが完了したときに1つのManagement API呼び出しが行われます。
他のManagement API呼び出しを変換する
一般に、ルールやアクションなどの高トラフィックのクリティカルパスからManagement APIを呼び出すことはお勧めしません。拡張ポイントからの呼び出しを含め、すべてのAuth0 APIへの要求にはレート制限があり、すべてのログインに対してAPIを呼び出すと、トラフィックが多いときにログインが失敗する可能性があります。 ただし、呼び出しが必要で、それらがレート制限を回避するように構成されている場合は、アクション内からManagement APIを呼び出すことができます。前述の「制限事項を理解する」セクションで説明しているように、アクションにはManagement APIのアクセストークンが提供されないため、アクションを有効にする前にアクセストークンを取得する必要があります。- M2Mアプリケーションを登録し、Management APIに対して認可します。
- アクションに クライアントID と クライアントシークレット を保存します。
- Management APIのアクセストークンを取得します。
- Management APIを呼び出します。
リダイレクトを変換する
ルールは、外部ページにログインしているユーザーをリダイレクトし、応答を待つことができます。この場合、リダイレクト前のすべてのルールが2回実行されます。つまり、リダイレクト前に1回と、応答時に1回です。リダイレクトと応答のロジックは通常、同じルールに含まれます。 アクションでは、リダイレクトが発生するとアクションパイプラインが一時停止し、ユーザーが戻ると再開されます。また、エクスポートされたリダイレクトトリガー関数はリダイレクトコールバックとは別のものです。あらゆるリダイレクトをアクションで適切に行う方法について、このガイドで説明することはできません。詳細については、「アクションを使ったリダイレクト」をお読みください。
現在のSSOクライアント参照を変換します
ルールのcontext.ssoオブジェクトは、現在のセッションとそれを使用しているクライアントに関する詳細を提供します。詳細については、ルールのコンテキストオブジェクトプロパティのcontext.ssoエントリを参照してください。同様の情報は、アクションのevent.sessionオブジェクトでも入手できます。
変更前