> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# カスタムデータベースのアクションスクリプト用テンプレート

> カスタムデータベースのアクションスクリプト用テンプレートについて説明します。

<Card title="利用可能性はAuth0プランによって異なる">
  この機能が利用できるかどうかは、ご利用のAuth0プラン（または契約）によります。詳細については、「[価格設定](https://auth0.com/pricing)」をお読みください。
</Card>

ユーザーIDデータを含んた独自のデータベース（Auth0ではレガシーデータストアと呼ばれる）がある場合は、それをIDプロバイダーとして使用し、ユーザーを認証することができます。Auth0で、レガシーデータストアへの接続をカスタムデータベースとして作成し、構成します。データは、レガシーデータベースからAuth0のデータストアに時間をかけて徐々に移行するか、移行せずに使用し続けることができます。カスタマイズ可能なスクリプトテンプレートを使用すると、カスタムデータベースで関数を実行することができます。

カスタムデータベーススクリプトには、以下の2種類があります。

* **自動移行** ：Auth0へのログイン時に、ユーザーがまだAuth0に存在していない場合、スクリプトはレガシーデータベースでユーザーの有無を確認します。ユーザーが見つかり、 **Auth0にユーザーをインポート** フラグがある場合には、ユーザーデータによってユーザーがAuth0データストアに移行されます。この機能は、 **トリクルダウン移行** や **レイジー移行** と呼ばれることがあります。
* **レガシーデータベース** ：ユーザーのログイン試行、作成、パスワード変更、メール検証や削除では、Auth0は必ず基盤となるデータベースにクエリを行います。ユーザーが見つかって、 **Auth0にユーザーをインポート** フラグが **ない** 場合には、ユーザーデータはレガシーデータベースに留まり、Auth0には移行 **されません** 。

Auth0には、以下のカスタムデータベースのアクションスクリプトがあります。

* [パスワード変更](/docs/ja-jp/authenticate/database-connections/custom-db/templates/change-password)
* [ユーザー作成](/docs/ja-jp/authenticate/database-connections/custom-db/templates/create)
* [ユーザー削除](/docs/ja-jp/authenticate/database-connections/custom-db/templates/delete)
* [ユーザー取得](/docs/ja-jp/authenticate/database-connections/custom-db/templates/get-user)
* [ログイン](/docs/ja-jp/authenticate/database-connections/custom-db/templates/login)
* [ユーザー検証](/docs/ja-jp/authenticate/database-connections/custom-db/templates/verify)
* [メール変更](/docs/ja-jp/authenticate/database-connections/custom-db/templates/change-email)

<Card title="ネットワークのファイアウォール">
  ファイアウォールの内側にいる場合、この機能を正しく動作させるには、適切なAuth0のIPアドレスをAllow List（許可リスト）に追加する必要があるかもしれません。
</Card>

## スクリプトの実行

「[カスタムデータベース接続](/docs/ja-jp/authenticate/database-connections/custom-db)」で説明されているように、カスタムデータベース接続タイプでは、アクションスクリプトを構成することができます。アクションスクリプトとは、レガシーIDストアとのやり取りに使用されるカスタムコードのことです。原則的に、各アクションスクリプトは名前が付けられたJavaScript関数で、多数のパラメータが渡されます。関数の名前と渡されるパラメーターは、スクリプトによって異なります。

### 制限

アクションスクリプトの実行は、JavaScriptの非同期な性質に対応し、[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)オブジェクトなどのコンストラクトを使用することができます。非同期処理を行うと、操作の完了が保留され、事実上一時停止となります。Auth0のサーバーレスWebtaskコンテナーには通常、20秒の実行制限が設けられており、それを超えると、コンテナーはリサイクルされます。この制限によってコンテナーがリサイクルされると、操作は途中で終了され、最終的にはエラー状態が返されます（`global`オブジェクトもリセットされる可能性があります）。

### 完了とcallback関数

各アクションスクリプトに用意された`callback`関数は、操作が完了したことを示す合図として機能します。アクションスクリプトは、`callback`関数への呼び出し（暗示的あるいはJavaScript returnステートメントを明示的に実行）の直後に完了し、その他の操作は実行しません。

<Warning>
  Auth0が提供する`callback`関数は **1回** だけ呼び出す必要があります。1つのアクションスクリプト内で関数を複数回呼び出すと、予期しない結果が得られたり、エラーが発生したりします。
</Warning>

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  `callback`が、`callback()`のようにパラメーターを指定せずに実行された場合は、`callback(null)`の実行時と同じように関数が呼び出されます。
</Callout>

アクションスクリプトが非同期処理を使用する場合、`callback`関数への呼び出しは、非同期処理が完了する時点まで延期され、一番最後に呼び出される必要があります。非同期実行では、非同期操作が完了した後でJavaScript `callback`が実行されます。このコールバックは通常、JavaScript関数のメイン（同期）のボディーが完了した後、ある時点で呼び出されます。

<Warning>
  `callback`関数の実行に失敗すると、その実行は停止し、最終的にはエラー状態が返されます。アクションスクリプトは、`callback`関数を1回だけ呼び出す必要があります：`callback`関数は、実行の停止を防ぐために少なくとも1回呼び出す必要がありますが、複数回呼び出すことはできません。複数回呼び出そうとすると、予期しない結果が得られたり、エラーが発生したりします。
</Warning>

## もっと詳しく

* [カスタムデータベースのアクションスクリプトのベストプラクティス](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts/execution)
* [カスタムデータベースのトラブルシューティング](/docs/ja-jp/authenticate/database-connections/custom-db/error-handling)
