post-login) Trigger に関連付けてください。以下の手順に従い、Actions を元の Rules と同じ順序に保てば、動作は同一になります。
移行を計画する
移行を計画する際のヒント
- Actions と Rules は 1:1 の対応にしておくと、機能をブロック単位でオン/オフしてテストできます。
- コストの高い処理や一度限りの処理が重複しないように、ユーザーメタデータのフラグを使用してください。
- Rules パイプラインの末尾からさかのぼって作業してください。有効な Rules はデプロイ済みの Actions より先に実行されるため、Actions で別のロジックを構築してテストしている間も、一部のロジックを Rules に残しておけます。
- 変更は、影響とトラフィックが最も少ない時間帯に実施してください。
- 切り替えによって無効なログインや保護の欠落が発生するおそれがある場合は、一時的にログインページをカスタマイズすることでログインを停止することを検討してください。
- Auth0 Deploy CLI を使用して、移行全体を一括または段階的にスクリプト化、テストし、すばやく実装することを検討してください。
制限事項を理解する
- Actions では、Rules のように Management API のアクセストークン やグローバルな
auth0オブジェクトは提供されません。Management API 呼び出しを引き続き行う方法については、Convert Code セクションを参照してください。
コードを変換する
コード変換時のヒント
- 一般に、Rules の
userオブジェクトとcontextオブジェクトの読み取り専用プロパティは、Actions ではeventオブジェクトで確認します。ログインの失敗やユーザーメタデータの更新など、Actions がシステムに及ぼす副作用は、apiオブジェクトの関数で扱います。 - コードの作成には、Auth0 Dashboard の Actions Code Editor を使用してください。エラーのハイライト表示や自動補完候補の提示に役立ちます。
- 本番環境に移行する前に、新しい Actions を ステージング環境またはテスト環境 で十分にテストしてください。
Rule コードを新しい Action にコピーする
Rule コードは新しい Action にコピーし、Auth0 Dashboard の Actions Code Editor を使用することをお勧めします。これにより、コードに残っている問題を特定しやすくなります。
- 本番テナントにログインし、変換する Rule のコードをコピーします。
- 非本番テナントに切り替え、Auth0 Dashboard > Actions > Library に移動します。
-
Build Custom を選択し、次の操作を行います。
- 変換する Rule と同じ名前を Action の 名前 に入力します。
- Trigger で Login / Post Login を選択します。
- Runtime で Node 16 を選択します。
- Create を選択します。
-
Actions Code Editor のコードブロックで、エクスポートされた
onExecutePostLogin関数の下に、変換する Rule のコードを貼り付けます。 - コードを関数内に移しながら、この記事の残りの部分で説明する変更を加えます。
関数宣言を変更する
user、context、callback をパラメーターに取る通常の関数宣言を使用しますが、Actions では特定の名前でエクスポートする関数を使用します。次のように変更してください。現時点では、表示されるエラーは無視してかまいません。
変更前
ユーザーデータへのアクセス方法を変更する
user オブジェクト に格納されます。Actions では、このデータは event オブジェクト の user プロパティにあります。既存のプロパティの大半には、この新しい場所からアクセスできます。
event オブジェクトのプロパティに格納または変更されたデータには、他の Actions からアクセスできません。コンテキストデータへのアクセス方法を変更する
context オブジェクト に格納されています。Actions では、このデータは再構成され、event オブジェクト に移されています。移行されたプロパティの多くはそのままですが、わかりやすさを高めるために一部は統合されています。
event オブジェクトのプロパティに格納または変更されたデータには、他の Actions からアクセスできません。Rule で context.idToken や context.multifactor などのプロパティにデータを設定してコア機能をトリガーしている場合は、該当するユースケースを扱う以下のセクションのいずれかを参照してください。依存関係を変換する
require 文内にバージョン番号を含める形で指定します。Actions では、より標準的な CommonJS 構文を使用し、バージョンはコードエディターの外で指定する必要があります。
Rules では、特定のパッケージの特定バージョンのみが許可されており、新しいパッケージやバージョンを追加するには Auth0 へのリクエストが必要です。Actions では、npm レジストリで利用可能な任意のパッケージを require できます。
npm モジュールが最新バージョンでない場合は、今がアップデートのよい機会です。- Rule コード内の
require文を探します。 - バージョン番号を削除し、番号は控えておきます。
- Write Your First Action の「Add a Dependency」セクションの手順に従って依存関係を追加します (依存関係が core NodeJS module でない場合) 。依存関係が core NodeJS module の場合は、追加する必要はありません。
- 見つかった
require文をfunction宣言の外に移動します。
コールバックを変換する
callback() 関数を呼び出し、ログインに失敗した場合はエラーを渡す必要があります。一方、Actions では成功時は return でき、ログインに失敗した場合はメッセージを指定して api メソッドを呼び出せます。Rule 内の callback() はすべて削除するか、失敗時は api.access.deny() に置き換える必要があります。Rules と Actions のどちらでも、特定の条件で処理を停止する必要がある場合は、return 文を使用します。
変更前
シークレットの扱いを変更する
- 作業中の Action に必要な値を保存します。
- Action 内からアクセスする必要がある値ごとに Secret を追加します。方法については、Write Your First Action の Add a Secret セクションを参照してください。
- コードを変換します。
トークンのカスタムクレームを変換する
context オブジェクトのプロパティとして扱いますが、Actions では api オブジェクト のメソッドを使用します。
変更前
多要素認証のトリガーを変換する
context オブジェクト の multifactor プロパティを変更することで、 をトリガーできます。Actions では、これは api オブジェクトのメソッド を使用して行います。
変換前
ユーザーメタデータの更新を変換する
user_metadata プロパティと app_metadata プロパティを更新するには Management API を呼び出す必要があり、その結果、rate limit エラーが発生することがあります。一方、Actions では、複数のユーザーメタデータの変更を指定しても、Management API の呼び出しを 1 回にまとめることができます。
変更前
api.user.setUserMetadata または api.user.setAppMetadata を呼び出す必要があります。Actions では、1 つ以上の Action にまたがってこれらの関数が複数回呼び出されても、フローの完了時に実行される Management API 呼び出しは 1 回だけです。
他の Management API 呼び出しを変換する
- Machine-to-Machine アプリケーションを登録し、Management API へのアクセスを許可します。
- クライアントID と クライアントシークレット を Action に保存します。
- Management API 用のアクセストークンを取得します。
- Management API を呼び出します。
リダイレクトを変換する
Actions でリダイレクトを正しく処理する方法のすべてをこのガイドで扱うことはできません。詳しくは、Redirect with Actions を参照してください。
現在の SSO クライアント参照を変換する
context.sso オブジェクトは、現在のセッションと、そのセッションを使用しているクライアントに関する詳細を提供します。詳細については、Context Object Properties in Rules の context.sso の項目を参照してください。同様の情報は、Actions の event.session オブジェクトでも利用できます。
Before