移行を計画する
デプロイされたActionsはアクティブなHooksの後に実行されるため、Dashboardでフックを一度に1つずつ変換することも、を使用して一度にすべて変換することもできます。 コードを変換してから、アクションをアクティブにし、フックを非アクティブにする必要があります。アクションの有効化とフックの無効化は、連続してすばやく実行できますが、順序によっては、両方が実行されない、またはどちらも実行されない時間が短期間発生する場合があります。 このため、パイプラインを段階的に移行することをお勧めします。フックコードの一部をアクションコードに変換し、ステージング環境でテストしてから、一度に1つずつライブに移行します。アクティブなHooksはActionsのデプロイ前に作動するため、フック内のいくつかのロジックを構築した状態で維持しつつ、その他のロジックをActionsでテストできます。移行を計画するときのヒント
- フラグを使って、コストがかかる操作や1回限りの操作が重複しないようにします。
- 変更は、影響やトラフィックが最も少ない時間帯や時期に行います。
- 移行のスクリプトを作成し、一括または繰り返してテストと実装が行えるように、Auth0 Deploy CLIの使用を考慮します。
制限事項を理解する
ActionsはHooksでできることの大部分を処理できますが、移行を開始する前にいくつかの制限事項に注意する必要があります(注:HooksとActionsはどちらも移行中に実行できます)。- Actionsは、アクセストークンやAPI応答などのデータを複数の実行にわたって保持することはできません。
- Actionsには、HooksのようにManagement APIのアクセストークンやグローバル
auth0
オブジェクトへのアクセスが提供されていません。
コードを変換する
フックをアクションに変換するには、フック固有のコードをActionsコードに置き換える必要があります。このセクションでは、機能するフックを同等のアクションに変換するためのタスクについて説明します。コードを変換するときのヒント
- 一般的に、Actionsの
event
オブジェクトについて、Hooks機能に渡されたオブジェクトの読み取り専用プロパティを確認します。 - コードを書くときは、Auth0 DashboardのActions Code Editorを使います。エラーがハイライトされたり、オートコンプリート機能によって提案が自動入力されたりするので、便利です。
- 稼働させる前に、新しいActionsのテストをステージング環境やテスト環境で念入りに行います。
フックコードを新しいアクションにコピーする
フックのコードを新しいアクションにコピーし、Auth0 DashboardのActionsコードエディターで使用することをお勧めします。コードにある未解決の問題が特定できます。
- 運用テナントにログインし、変換元となるフックのコードをコピーします。
- 非運用テナントに切り替えて、[Auth0 Dashboard] > [Actions(アクション)] > [Library(ライブラリ)]に移動します。
-
[Build Custom(カスタムの構築)] を選択した後、
- 変換するフックの名前と一致するアクションの Name(名前) を入力します。
-
[Trigger(トリガー)] で、適切なトリガーを選択します 。
フックのタイプ アクションのトリガー Client Credentials Exchange(クライアント資格情報交換) M2M/Client-Credentials(M2M/クライアント資格情報) Pre-User-Registration(ユーザー登録前) Pre User Registration(ユーザー登録前) Post-User-Registration(ユーザー登録後) Post User Registration(ユーザー登録後) Post-Change-Password(パスワード変更後) Post Change Password(パスワード変更後) Send Phone Message(電話メッセージの送信) Send Phone Message(電話メッセージの送信) - [Runtime(ランタイム)] で、 [Node 16] を選択します。
- [Create(作成)] を選択します。
- Actionsコードエディターのコードブロックで、変換したいフックコードをエクスポートされた関数の下に貼り付けます。
-
コードを関数に移動するときに、この記事で後述している変更を加えます。Actionsの新しいトリガーに関連付けられた
event
オブジェクトについてもお読みください。このガイドの後半で「データへのアクセス方法を変更する」セクションに移動すると、関連するドキュメントへのリンクが表示されます。
関数宣言を変更する
Hooksの関数はデフォルトのエクスポートを使ってエクスポートされますが、Actionsの関数は名前を付けてエクスポートされます。名前付きエクスポートは、変換するフックの種類によって変化します。マッピングには以下が含まれます。フックの種類 | 名前付きエクスポート |
---|---|
Client Credentials Exchange(クライアント資格情報交換) | onExecuteCredentialsExchange |
Pre-User Registration(ユーザー登録前) | onExecutePreUserRegistration |
Post-User Registration(ユーザー登録後) | onExecutePostUserRegistration |
Post-Change Password(パスワード変更後) | onExecutePostChangePassword |
Send Phone Message(電話メッセージ送信) | onExecuteSendPhoneMessage |
依存関係を変換する
HooksとActionsは依存関係を類似した方法で処理します。どちらも、依存関係は、UIまたはManagement APIを使って個別に追加され、コードに含められます。どちらの場合も、npm
レジストリで利用可能なパッケージを要求することができます。
npm
モジュールが最新バージョンでないなら、今こそアップデートする絶好の機会です!- フックコード内の
require
ステートメントを検索してください。 - バージョン番号を削除しますが、これらの番号はメモしておいてください。
- 依存関係がコアNodeJSモジュールでない場合は、「初めてアクションを作成する」の「依存関係を追加する」セクションの手順に従って依存関係を追加してください。依存関係がコアNodeJSモジュールである場合は、追加する必要はありません。
- 見つけた
require
ステートメントをfunction
宣言の外に移動してください。
シークレットを変換する
HooksとActionsはシークレットを類似した方法で処理します。どちらも、シークレットは、UIまたはManagement APIを使ってフックやアクションごとに追加され、コードに含められます。 シークレットをHooksからActionsに変換するには、以下の手順で行います。- 操作中の特定のアクションに必要な値を保存します。
- アクション内からアクセスする必要がある値ごとにシークレットを追加します。方法については、「初めてアクションを作成する」の「 シークレットを追加する 」セクションをお読みください。
- コードを変換します。
データへのアクセス方法を変更する
フックでは、ユーザーやクライアン、要求についてのデータ、およびその他のコンテキストデータがフック関数に渡される複数の因数に保管されます。Actionsでは、このデータは再形成され、event
オブジェクトに移動します。プロパティの多くはそのまま移行されましたが、わかりやすくするために一部が結合されました。
event
オブジェクトは、変換するフックの種類によって変化します:
- クライアント資格情報の交換 - Actionsイベントオブジェクト
- パスワード変更後- Actionsイベントオブジェクト
- ユーザー登録後 - Actionsイベントオブジェクト
- ユーザー登録前 - Actionsイベントオブジェクト
- 電話メッセージの送信 - Actionsイベントオブジェクト
フックの
context
オブジェクトとは異なり、event
オブジェクトのプロパティで保管・変更されたデータは、他のアクションでは使用できません。フックが、これらのプロパティでデータを設定することでコア機能をトリガーしている場合は、アクション間でデータを保持するために、Machine to Machine(M2M)やPre User Registration(ユーザー登録前)のアクションフローにあるapi
インターフェイスを使う必要があります。コールバックを変換する
フックの処理が終了したら、callback()
関数を呼び出して、実行を完了する必要があります。それとは逆に、Actionsはコールバックのメカニズムを使用しないため、Actionsの関数からcallback()
のすべてのインスタンスを削除する必要があります。
callback()
関数を使ってクライアント資格情報交換やユーザー登録前のフックで要求を失敗させたりユーザーを更新したりしていた場合でも、Actionsでは新しいapi
インターフェースを通じてこれを行うことができます。