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

# カスタムデータベース接続をテストする方法

> カスタムデータベース接続をテストする方法について説明します。

Auth0 Dashboard を使用すると、同じテナントまたは別のテナントに対してユーザーを認証することで、カスタムデータベース接続をテストできます。

ユーザーストアからの[ユーザーのインポートを有効にしている](/docs/ja-jp/manage-users/user-migration/configure-automatic-migration-from-your-database)かどうかにかかわらず、まずテスト用のテナントとアプリケーションを作成します。

<div id="create-a-test-tenant-and-application">
  ## テスト用のテナントとアプリケーションを作成
</div>

1. テストに使用する[新しいテナントを作成](/docs/ja-jp/get-started/auth0-overview/create-tenants)します。

2. [Machine-to-Machine アプリケーションを作成](https://manage.auth0.com/#/applications/applications/create)します。

   Management API のスコープを有効にするとき、およびカスタムデータベースアクションスクリプトを作成するときに、アプリケーションのクライアント ID とシークレットが必要です。

3. このアプリケーションで **Password** と **Client Credential** の両方のグラントを有効にします。

   <Frame>
     <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=0ebd711995e18f1136dab6cb1b4c78be" alt="Auth0 Dashboard > Applications > Advanced Settings" data-og-width="1602" width="1602" data-og-height="794" height="794" data-path="docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?w=280&fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=929083f5c8cace053bf64e790fd07f12 280w, https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?w=560&fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=8a9d0dcf81366ea177f0067c9bcf4e9e 560w, https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?w=840&fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=5a1181ef297ea777a38ee01a1553ccd7 840w, https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?w=1100&fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=64bebc89ee9eeb3a4dcd82289b446f34 1100w, https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?w=1650&fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=7bff613937f0e2128c19af41c0df54ad 1650w, https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4caAveuhYurCDb5F8mdImm/38496efe6f670d828542b02a56e5ca64/Grant_Types_-_English.png?w=2500&fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=0b3caa889661bafaa2e948e38f9075c6 2500w" />
   </Frame>

4. アプリケーションを認可するには、[Applications > APIs](https://manage.auth0.com/#/apis) に移動して **Management API** を選択します。

5. **Machine-to-Machine Applications** タブで、トグルを使用してテスト用アプリケーションを認可します。

6. ドロップダウンメニューを選択し、次の Auth0 Management API スコープを有効にします。

   * `read:users`
   * `update:users`
   * `delete:users`
   * `create:users`
   * `read:users_app_metadata`
   * `update:users_app_metadata`
   * `create:users_app_metadata`

<div id="test-with-import-users-to-auth0-enabled">
  ## Auth0 へのユーザーインポートを有効にしてテストする
</div>

[ユーザーインポートを有効にした状態](/docs/ja-jp/manage-users/user-migration/configure-automatic-migration-from-your-database)でカスタムデータベース接続をテストするには、テナントとアプリケーションを作成した後、ソースデータベース接続とターゲットデータベース接続を作成します。

1. [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database)で、**Required Username** を有効にしたデータベース接続を2つ作成します。一方はソース、もう一方はターゲットとして使用します。Organizations を使用してテストする場合は、**Context object in database scripts** を有効にします。

   <Tip>
     テストで簡単なパスワードを使用できるように、ターゲットデータベースとソースデータベースの両方で **Password Policy** を **Non-empty password required** に設定できます。
   </Tip>

2. ソースデータベース接続にテストユーザーを作成します。[**Auth0 Dashboard > User Management > Users**](https://manage.auth0.com/#/users)で、\*\*+Create User > **Create via UI** を選択します。

   開いた **Create user** ウィンドウで、**Connection** にソースデータベース接続を選択します。必要なフィールドに入力し、**Create** (または **Create Another**) を選択します。

3. ターゲットデータベース接続を設定します。

   * **Custom Database** タブで、**Use my own database** を有効にします。

   * **Settings** タブで、**Import Users to Auth0** を有効にします。

   * **Custom Database** タブの **Database settings** セクションで、ソースデータベース接続から次の情報を追加します。

     | キー                | 値                                             |
     | ----------------- | --------------------------------------------- |
     | `client_id`       | 作成したアプリケーションの クライアント ID。                      |
     | `client_secret`   | 作成したアプリケーションの Client Secret。                  |
     | `auth0_domain`    | Auth0 ドメイン内のテナント名: `yourTenant.us.auth0.com`。 |
     | `source_database` | ソース接続の名前。                                     |

4. ターゲットデータベース内の [Login](/docs/ja-jp/authenticate/database-connections/custom-db/templates/login) および [Get User](/docs/ja-jp/authenticate/database-connections/custom-db/templates/get-user) データベースアクションスクリプトを更新します。

5. 各スクリプトで **Save and Try** を選択します。[Actions リアルタイムログ](/docs/ja-jp/customize/actions/actions-real-time-logs)で `console.log` 出力を監視します。

6. **Try Connection** を選択して、接続をリアルタイムでテストします。

<div id="test-with-import-users-to-auth0-disabled">
  ## Import Users to Auth0 を無効にしてテストする
</div>

Import Users to Auth0 を無効にしてカスタムデータベース接続をテストするには、テナントとアプリケーションを作成した後、ソースデータベース接続とターゲットデータベース接続を作成します。

1. [**Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) で、対象となるテスト用データベース接続を1つ作成します。

2. 以下のサンプルを使用して、データベースアクションスクリプトを更新します。

   <Tabs>
     <Tab title="Get User">
       次のサンプルで[Get User スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/get-user)を更新します。

       ```js lines expandable theme={null}
       async function getUser(user, context, callback) {
           log(`Script started.`);
           log(`Requesting an Access Token from "${configuration.auth0_domain}".`);
           let accessToken = await getAccessToken();
           accessToken = accessToken.access_token;
           if (!accessToken) return log(`Failed to get an Access Token from "${configuration.auth0_domain}".`, true);
           log(`The Access Token is available. Searching for user "${user}" in "${configuration.source_database}"`);
           user = user.toLowerCase();
           const searchQuery = encodeURI(`identities.connection:"${configuration.source_database}"+AND+(email:${user} OR username:${user})`);
           var options = {
               method: `GET`,
               url: `https://${configuration.auth0_domain}/api/v2/users?q=${searchQuery}`,
               headers: {
                   Authorization: `Bearer ${accessToken}`,
               }
           };
           request(options, function (error, response) {
               if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
               let search_results = JSON.parse(response.body);
               let profile = null;
               if (search_results.length > 0) {
                   log(`A user "${user}" is FOUND in "${configuration.source_database}" database.`);
                   profile = {
                       user_id: search_results[0].user_id.toString(),
                       nickname: search_results[0].nickname,
                       username: search_results[0].username,
                       email: search_results[0].email
                   };
               } else {
                   log(`A user "${user}" is NOT FOUND in "${configuration.source_database}" database.`);
               }
               log(`Script completed!`);
               return callback(null, profile);
           });
           /* -- クライアント資格情報によるアクセストークンの取得 -- */
           async function getAccessToken() {
               var options = {
                   method: `POST`,
                   url: `https://${configuration.auth0_domain}/oauth/token`,
                   headers: {
                       "Content-Type": `application/x-www-form-urlencoded`,
                   },
                   form: {
                       grant_type: `client_credentials`,
                       client_id: configuration.client_id,
                       client_secret: configuration.client_secret,
                       audience: `https://${configuration.auth0_domain}/api/v2/`
                   },
                   json: true
               };
               return new Promise(function (resolve) {
                   request(options, function (error, response) {
                       resolve(error || response.body);
                   });
               });
           }
           /* -- ログ -- */
           function log(message, error = false) {
               const script_name = `GET USER`;
               const error_label = error ? `(ERROR)` : ``;
               const return_message = `${script_name}: ${error_label} ${message}`;
               console.log(return_message);
               if (error) return callback(new Error(return_message));
           }
       }
       ```
     </Tab>

     <Tab title="Login">
       以下のサンプルで[Login スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/login)を更新します。

       ```javascript lines expandable theme={null}
       function login(usernameOrEmail, password, context, callback) {
         log(`Script started.`);
         const jwt = require('jsonwebtoken');
         const options = {
           method: `POST`,
           url: `https://${configuration.auth0_domain}/oauth/token`,
           headers: { "Content-Type": `application/x-www-form-urlencoded` },
           json: true,
           form: {
             grant_type: `http://auth0.com/oauth/grant-type/password-realm`,
             client_id: configuration.client_id,
             client_secret: configuration.client_secret,
             username: usernameOrEmail,
             password: password,
             realm: `${configuration.source_database}`
           }
         };
         request(options, function (error, response, body) {
           log(`Attempting to authenticate a user "${usernameOrEmail}" against "${configuration.source_database}" database in "${configuration.auth0_domain}" tenant.`);
           if (error) return log(`Cannot connect to "${configuration.auth0_domain}" database.`, true);
           if (response.statusCode !== 200) {
             console.log(`LOGIN: (ERROR) ${response.body.error_description}`);
             return callback(new WrongUsernameOrPasswordError(usernameOrEmail, `LOGIN: (ERROR) ${response.body.error_description}`));
           }
           log(`Successfuly authenticated user "${usernameOrEmail}" against "${configuration.source_database}" database in "${configuration.auth0_domain}" tenant.`);
           const decoded_id_token = jwt.decode(body.id_token);
           const profile = {
             user_id: decoded_id_token.sub,
             nickname: decoded_id_token.nickname,
             username: decoded_id_token.username,
             email: decoded_id_token.email
           };
           log(`Script completed.`);
           return callback(null, profile);
         });
         /* -- ログ -- */
         function log(message, error = false) {
           const script_name = `LOGIN`;
           const error_label = error ? `(ERROR)` : ``;
           const return_message = `${script_name}: ${error_label} ${message}`;
           console.log(return_message);
           if (error) return callback(new Error(return_message));
         }
       }
       ```
     </Tab>

     <Tab title="Create">
       [Create スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/create)を次のサンプルに更新します。

       ```js lines expandable theme={null}
       async function create(user, context, callback) {
         log(`Script started.`);
         log(`Requesting an Access Token from "${configuration.auth0_domain}".`);
         let accessToken = await getAccessToken();
         if (!accessToken.access_token) return log(`Failed to get an Access Token from "${configuration.auth0_domain}".`, true);
         accessToken = accessToken.access_token;
         log(`The Access Token is available. Attempting to create a user "${user.email}" in "${configuration.source_database}"`);
         const options = {
           method: `POST`,
           url: `https://${configuration.auth0_domain}/api/v2/users`,
           headers: {
             Authorization: `Bearer ${accessToken}`,
             "Content-Type": `application/x-www-form-urlencoded`
           },
           form: {
             connection: configuration.source_database,
             email: user.email,
             password: user.password,
             username: user.username
           },
           json: true
         };
         request(options, function (error, response) {
           if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
           switch (response.statusCode) {
             case 201:
               log(`The user "${user.email}" is successfuly created in "${configuration.source_database}" database.`);
               return callback(null);
             case 409:
               return callback(new ValidationError(`user_exists`, `The user already exists in "${configuration.source_database}" database.`));
             default:
               return log(`Failed to create a user "${user.email}" in "${configuration.source_database}" database. Error: "${response.statusCode}, ${response.body.message}"`, true);
           }
         });
         /* -- クライアント資格情報によるアクセストークンの取得 -- */
         async function getAccessToken() {
           var options = {
             method: `POST`,
             url: `https://${configuration.auth0_domain}/oauth/token`,
             headers: {
               "Content-Type": `application/x-www-form-urlencoded`,
             },
             form: {
               grant_type: `client_credentials`,
               client_id: configuration.client_id,
               client_secret: configuration.client_secret,
               audience: `https://${configuration.auth0_domain}/api/v2/`
             },
             json: true
           };
           return new Promise(function (resolve) {
             request(options, function (error, response) {
               resolve(error || response.body);
             });
           });
         }
         /* -- ログ -- */
         function log(message, error = false) {
           const script_name = `CREATE`;
           const error_label = error ? `(ERROR)` : ``;
           const return_message = `${script_name}: ${error_label} ${message}`;
           console.log(return_message);
           if (error) return callback(new Error(return_message));
         }
       }
       ```
     </Tab>

     <Tab title="Delete">
       [Delete script](/docs/ja-jp/authenticate/database-connections/custom-db/templates/delete)を次のサンプルに更新します。

       ```js lines expandable theme={null}
       async function deleteUser(user, context, callback) {
         log(`Script started.`);
         log(`Requesting an Access Token from "${configuration.auth0_domain}".`);
         let accessToken = await getAccessToken();
         if (!accessToken.access_token) return log(`Failed to get an Access Token from "${configuration.auth0_domain}".`, true);
         accessToken = accessToken.access_token;
         log(`The Access Token is available. Attempting to delete a user "${user}" from "${configuration.source_database}"`);
         const options = {
           method: `DELETE`,
           url: `https://${configuration.auth0_domain}/api/v2/users/${user}`,
           headers: {
             Authorization: `Bearer ${accessToken}`,
             "Content-Type": `application/x-www-form-urlencoded`
           },
           json: true
         };
         request(options, function (error, response) {
           if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
           switch (response.statusCode) {
             case 204:
               log(`The user "${user}" is successfuly deleted from "${configuration.source_database}" database.`);
               return callback(null);
             default:
               return log(`Failed to delete a user "${user}" from "${configuration.source_database}" database. Error: "${response.statusCode}, ${response.body.message}"`, true);
           }
         });
         /* -- クライアント資格情報によるアクセストークンの取得 -- */
         async function getAccessToken() {
           var options = {
             method: `POST`,
             url: `https://${configuration.auth0_domain}/oauth/token`,
             headers: {
               "Content-Type": `application/x-www-form-urlencoded`,
             },
             form: {
               grant_type: `client_credentials`,
               client_id: configuration.client_id,
               client_secret: configuration.client_secret,
               audience: `https://${configuration.auth0_domain}/api/v2/`
             },
             json: true
           };
           return new Promise(function (resolve) {
             request(options, function (error, response) {
               resolve(error || response.body);
             });
           });
         }
         /* -- ログ -- */
         function log(message, error = false) {
           const script_name = `DELETE`;
           const error_label = error ? `(ERROR)` : ``;
           const return_message = `${script_name}: ${error_label} ${message}`;
           console.log(return_message);
           if (error) return callback(new Error(return_message));
         }
       }
       ```
     </Tab>

     <Tab title="Verify">
       [Verify スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/verify)を以下のサンプルに更新します。

       ```js lines expandable theme={null}
       async function verify(user, context, callback) {
         log(`Script started.`);
         log(`Requesting an Access Token from "${configuration.auth0_domain}".`);
         let accessToken = await getAccessToken();
         if (!accessToken.access_token) return log(`Failed to get an Access Token from "${configuration.auth0_domain}".`, true);
         accessToken = accessToken.access_token;
         log(`The Access Token is available. Searching for user "${user}" in "${configuration.source_database}"`);
         user = user.toLowerCase();
         const searchQuery = encodeURI(`identities.connection:"${configuration.source_database}"+AND+(email:${user} OR username:${user})`);
         var options = {
           method: `GET`,
           url: `https://${configuration.auth0_domain}/api/v2/users?q=${searchQuery}`,
           headers: {
             Authorization: `Bearer ${accessToken}`,
           }
         };
         request(options, function (error, response) {
           if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
           let search_results = JSON.parse(response.body);
           if (search_results.length > 0) {
             log(`A user "${user}" is found in "${configuration.source_database}" database.`);
             const user_id = search_results[0].user_id.toString();
             log(`Attempting to mark user "${user_id}" as verified in "${configuration.source_database}" database`);
             const options = {
               method: `PATCH`,
               url: `https://${configuration.auth0_domain}/api/v2/users/${user_id}`,
               headers: {
                 Authorization: `Bearer ${accessToken}`,
                 "Content-Type": `application/x-www-form-urlencoded`
               },
               form: {
                 email_verified: true,
               },
               json: true
             };
             request(options, function (error, response) {
               if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
               switch (response.statusCode) {
                 case 200:
                   log(`The user "${user}" is marked as verified in "${configuration.source_database}" database.`);
                   return callback(null, true);
                 default:
                   return log(`Failed to mark a user "${user}" as verified in "${configuration.source_database}" database. Error: "${response.statusCode}, ${response.body.message}"`, true);
               }
             });
           } else {
             log(`A user "${user}" is not found in "${configuration.source_database}" database. Unable to verify.`, true);
           }
         });
         /* -- クライアント資格情報によるアクセストークンの取得 -- */
         async function getAccessToken() {
           var options = {
             method: `POST`,
             url: `https://${configuration.auth0_domain}/oauth/token`,
             headers: {
               "Content-Type": `application/x-www-form-urlencoded`,
             },
             form: {
               grant_type: `client_credentials`,
               client_id: configuration.client_id,
               client_secret: configuration.client_secret,
               audience: `https://${configuration.auth0_domain}/api/v2/`
             },
             json: true
           };
           return new Promise(function (resolve) {
             request(options, function (error, response) {
               resolve(error || response.body);
             });
           });
         }
         /* -- ログ -- */
         function log(message, error = false) {
           const script_name = `VERIFY`;
           const error_label = error ? `(ERROR)` : ``;
           const return_message = `${script_name}: ${error_label} ${message}`;
           console.log(return_message);
           if (error) return callback(new Error(return_message));
         }
       }
       ```
     </Tab>

     <Tab title="Change Password">
       [Change Password スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/change-password)を次のサンプルに更新します。

       ```js lines expandable theme={null}
       async function changePassword(user, newPassword, context, callback) {
         log(`Script started.`);
         log(`Requesting an Access Token from "${configuration.auth0_domain}".`);
         let accessToken = await getAccessToken();
         if (!accessToken.access_token) return log(`Failed to get an Access Token from "${configuration.auth0_domain}".`, true);
         accessToken = accessToken.access_token;
         log(`The Access Token is available. Searching for user "${user}" in "${configuration.source_database}" database.`);
         user = user.toLowerCase();
         const searchQuery = encodeURI(`identities.connection:"${configuration.source_database}"+AND+(email:${user} OR username:${user})`);
         var options = {
           method: `GET`,
           url: `https://${configuration.auth0_domain}/api/v2/users?q=${searchQuery}`,
           headers: {
             Authorization: `Bearer ${accessToken}`,
           }
         };
         request(options, function (error, response) {
           if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
           let search_results = JSON.parse(response.body);
           if (search_results.length > 0) {
             log(`A user "${user}" is found in "${configuration.source_database}" database.`);
             const user_id = search_results[0].user_id.toString();
             log(`Attempting to change password for user "${user_id}" in "${configuration.source_database}" database.`);
             const options = {
               method: `PATCH`,
               url: `https://${configuration.auth0_domain}/api/v2/users/${user_id}`,
               headers: {
                 Authorization: `Bearer ${accessToken}`,
                 "Content-Type": `application/x-www-form-urlencoded`
               },
               form: {
                 password: newPassword,
               },
               json: true
             };
             request(options, function (error, response) {
               if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
               switch (response.statusCode) {
                 case 200:
                   log(`The user "${user}" password successfully changed in "${configuration.source_database}" database.`);
                   return callback(null, true);
                 default:
                   return log(`Failed to change password for "${user}"  in "${configuration.source_database}" database. Error: "${response.statusCode}, ${response.body.message}"`, true);
               }
             });
           } else {
             log(`A user "${user}" is not found in "${configuration.source_database}" database. Unable to change password.`, true);
           }
         });
         /* -- クライアント資格情報によるアクセストークンの取得 -- */
         async function getAccessToken() {
           var options = {
             method: `POST`,
             url: `https://${configuration.auth0_domain}/oauth/token`,
             headers: {
               "Content-Type": `application/x-www-form-urlencoded`,
             },
             form: {
               grant_type: `client_credentials`,
               client_id: configuration.client_id,
               client_secret: configuration.client_secret,
               audience: `https://${configuration.auth0_domain}/api/v2/`
             },
             json: true
           };
           return new Promise(function (resolve) {
             request(options, function (error, response) {
               resolve(error || response.body);
             });
           });
         }
         /* -- ログ -- */
         function log(message, error = false) {
           const script_name = `CHANGE PASSWORD`;
           const error_label = error ? `(ERROR)` : ``;
           const return_message = `${script_name}: ${error_label} ${message}`;
           console.log(return_message);
           if (error) return callback(new Error(return_message));
         }
       }
       ```
     </Tab>

     <Tab title="Change Email">
       以下のサンプルを使用して、[Change Email スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/change-email)を更新します。

       ```js lines expandable theme={null}
       async function changeEmail(user, newEmail, verified, callback) {
         log(`Script started.`);
         log(`Requesting an Access Token from "${configuration.auth0_domain}".`);
         let accessToken = await getAccessToken();
         if (!accessToken.access_token) return log(`Failed to get an Access Token from "${configuration.auth0_domain}".`, true);
         accessToken = accessToken.access_token;
         log(`The Access Token is available. Searching for user "${user}" in "${configuration.source_database}" database.`);
         user = user.toLowerCase();
         const searchQuery = encodeURI(`identities.connection:"${configuration.source_database}"+AND+(email:${user} OR username:${user})`);
         var options = {
           method: `GET`,
           url: `https://${configuration.auth0_domain}/api/v2/users?q=${searchQuery}`,
           headers: {
             Authorization: `Bearer ${accessToken}`,
           }
         };
         request(options, function (error, response) {
           if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
           let search_results = JSON.parse(response.body);
           if (search_results.length > 0) {
             log(`A user "${user}" is found in "${configuration.source_database}" database.`);
             const user_id = search_results[0].user_id.toString();
             log(`Attempting to change email / verified status for user "${user_id}" in "${configuration.source_database}" database.`);
             const options = {
               method: `PATCH`,
               url: `https://${configuration.auth0_domain}/api/v2/users/${user_id}`,
               headers: {
                 Authorization: `Bearer ${accessToken}`,
                 "Content-Type": `application/x-www-form-urlencoded`
               },
               form: {
                 email: newEmail,
                 email_verified: verified || false
               },
               json: true
             };
             request(options, function (error, response) {
               if (error) return log(`Cannot connect to "${configuration.source_database}" database.`, true);
               switch (response.statusCode) {
                 case 200:
                   log(`The user "${user}" email / verified status successfully changed in "${configuration.source_database}" database.`);
                   return callback(null, true);
                 default:
                   return log(`Failed to change email / verified status for "${user}"  in "${configuration.source_database}" database. Error: "${response.statusCode}, ${response.body.message}"`, true);
               }
             });
           } else {
             log(`A user "${user}" is not found in "${configuration.source_database}" database. Unable to change email / verified status.`, true);
           }
         });
         /* -- クライアント資格情報によるアクセストークンの取得 -- */
         async function getAccessToken() {
           var options = {
             method: `POST`,
             url: `https://${configuration.auth0_domain}/oauth/token`,
             headers: {
               "Content-Type": `application/x-www-form-urlencoded`,
             },
             form: {
               grant_type: `client_credentials`,
               client_id: configuration.client_id,
               client_secret: configuration.client_secret,
               audience: `https://${configuration.auth0_domain}/api/v2/`
             },
             json: true
           };
           return new Promise(function (resolve) {
             request(options, function (error, response) {
               resolve(error || response.body);
             });
           });
         }
         /* -- ログ -- */
         function log(message, error = false) {
           const script_name = `CHANGE EMAIL`;
           const error_label = error ? `(ERROR)` : ``;
           const return_message = `${script_name}: ${error_label} ${message}`;
           console.log(return_message);
           if (error) return callback(new Error(return_message));
         }
       }
       ```
     </Tab>
   </Tabs>

3. 各スクリプトで**保存して試す**を選択します。[Actions リアルタイムログ](/docs/ja-jp/customize/actions/actions-real-time-logs)の`console.log`出力を確認してください。

4. **接続を試す**を選択して、接続をリアルタイムでテストします。
