> ## 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への自動移行を有効にする

> カスタムデータベース接続でインポートモードを有効にすると、ユーザーがログインするたびに外部ユーザーストアからAuth0へ段階的に移行できます。

[カスタムデータベース接続](/docs/ja-jp/authenticate/database-connections/custom-db)を使用する場合、Auth0では外部ユーザーストアからAuth0ユーザーストアへのユーザーの自動移行 (*トリクル移行*または*遅延移行*とも呼ばれます) がサポートされています。

Auth0へのインポート対象として設定されたカスタムデータベース接続を介してユーザーが認証されると、次の処理が行われます。

<Frame>
  <img src="https://mintcdn.com/translations/mMSz-RNYLuOm2GmQ/docs/images/cdy7uua7fh8z/JAHBs6NzVRf0N5iXI7Wby/d0bfa23a1485aeb5d64bd52fe977d4fe/import-export-diagram.png?fit=max&auto=format&n=mMSz-RNYLuOm2GmQ&q=85&s=fc096bf75ba83a70138b408bcb952769" alt="ユーザー移行図" width="2726" height="2210" data-path="docs/images/cdy7uua7fh8z/JAHBs6NzVRf0N5iXI7Wby/d0bfa23a1485aeb5d64bd52fe977d4fe/import-export-diagram.png" />
</Frame>

ユーザーがAuth0ユーザーストアに存在しない場合、Auth0は外部ユーザーストアに対して認証を行い、認証に成功すると、認証時に指定されたIDとパスワードを使用してAuth0ユーザーストアにユーザーを作成します。

これにより、既存のユーザーは初回ログイン時にAuth0へ移行されるため、パスワードをリセットする必要はありません。新規ユーザーはAuth0ユーザーストアに直接追加されます。

<div id="start-the-migration">
  ## 移行を開始する
</div>

<Steps>
  <Step title="前提条件">
    自動移行を設定するには、次のものが必要です。

    * 外部ユーザーストアを使用する[カスタムデータベース接続](/docs/ja-jp/authenticate/database-connections/custom-db/create-db-connection)
  </Step>

  <Step title="移行を有効にする">
    [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database) で、カスタムデータベース接続を選択します。

    **設定**タブで、**Import Users to Auth0** をオンにし、**Save** を選択します。
  </Step>

  <Step title="データベースアクションスクリプトを設定する">
    [データベースアクションスクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates)は、ユーザーのログインやサインアップ時など、Auth0 が外部ユーザーストアとやり取りする際に実行するコードです。

    次に、**Custom Database** タブで、**Database Action Scripts** セクションを見つけます。

    <Frame>
      <img src="https://mintcdn.com/translations/pvjQqAy3EB2TK6NP/docs/images/cdy7uua7fh8z/4LBIvvjaABo51It4eVCmX3/4ef14765c79cc5b7ecfa3f3155caa9eb/Screen_Shot_2021-05-18_at_8.54.55_PM.png?fit=max&auto=format&n=pvjQqAy3EB2TK6NP&q=85&s=7886c762d1e9f81d707f9e53bb330dde" alt="Dashboard Authentication Database Connection Custom Database tab Database Action Scripts" width="2030" height="1366" data-path="docs/images/cdy7uua7fh8z/4LBIvvjaABo51It4eVCmX3/4ef14765c79cc5b7ecfa3f3155caa9eb/Screen_Shot_2021-05-18_at_8.54.55_PM.png" />
    </Frame>

    自動移行を有効にするには、次の 2 つのスクリプトを実装する必要があります。

    * [`login()` スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/login)：Auth0 データベースに存在しないユーザーがログインしようとしたときに実行されます。

    * [`getUser()` スクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/get-user)：サインアップやパスワード変更などの際に実行されます。`getUser()` スクリプトから返されたデータは、新しい Auth0 ユーザープロファイルに移行されます。
  </Step>
</Steps>

<div id="manage-external-user-store-data-during-migration">
  ## 移行中の外部ユーザーストアデータの管理
</div>

自動移行時に外部ユーザーストアのユーザーデータを扱う際は、以下のベストプラクティスに従うことをお勧めします。

* 明示的にアーカイブまたは削除しない限り、ユーザーは外部ユーザーストアに残ります。ユーザーがAuth0に移行された後、Auth0から削除されても外部ユーザーストアに残っている場合、そのユーザーがログインを試みて再度移行される可能性があります。

  意図的に削除したユーザーが意図せず再作成されるのを防ぐため、LoginまたはGet Usersのカスタムデータベースアクションスクリプトを実行する前に、外部ユーザーストア内のユーザーIDを移行済みとしてマークすることをお勧めします。

* 通常、Auth0ユーザーストア内のユーザーは、[Loginアクションスクリプト](/docs/ja-jp/authenticate/database-connections/custom-db/templates/login)の完了後に作成されます。Loginスクリプト内でインライン操作として外部ユーザーストアからユーザーを削除するのではなく、移行中にエラーが発生した場合のユーザーの誤削除を避けるため、独立したプロセスとしてユーザーを削除することをお勧めします。

<div id="complete-the-migration">
  ## 移行を完了する
</div>

<Steps>
  <Step title="移行の完了を確認する">
    外部ユーザーストアのすべてのユーザーがAuth0ユーザーストアに存在することを確認し、移行が完了していることを検証します。

    Auth0ユーザーストア内のすべてのユーザーは、次の2つの方法で確認できます。

    * [Auth0 Dashboard > User Management > Users](https://manage.auth0.com/#/users)。

    * Management APIの[List or Search users endpoint](/docs/ja-jp/api/management/v2/users/get-users) (`GET /users`) 。
  </Step>

  <Step title="外部ユーザーストアを切断する">
    すべてのユーザーが移行されたことを確認したら、データベースアクションスクリプトを何も実行しない関数に更新することで、外部ユーザーストアを切断できます。これにより、Auth0がユーザーを認証するために外部ユーザーストアへ接続しなくなります。

    <Warning>
      **Import Users to Auth0**オプションはオンのままにしてください。この設定により、Auth0はカスタムデータベース接続でAuth0ユーザーストアを使用します (データベースアクションスクリプトを介して外部ユーザーストアのみを使用するのではなく) 。
    </Warning>

    [Auth0 Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database)でデータベース接続を選択します。**Custom Database**タブで、**Database Action Scripts**セクションを探します。

    **Login**スクリプトを更新します。

    ```javascript lines theme={null}
    function login (email, password, callback) {
        return callback(null, null);
    }
    ```

    **Get User**スクリプトを更新します。

    ```javascript lines theme={null}
    function getByEmail (email, callback) {
        return callback(null, null);
    }
    ```
  </Step>
</Steps>

<div id="troubleshoot-user-migration-issues">
  ## ユーザー移行の問題のトラブルシューティング
</div>

自動移行で問題が発生した場合は、まず [カスタムデータベース接続とアクションスクリプトのベストプラクティス](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts) を参照してください。

<div id="duplicated-user-or-user-already-exists">
  ### 重複したユーザーまたはユーザーはすでに存在します
</div>

ユーザー移行プロセスでは、Auth0 はまず内部ユーザーストアに不完全なユーザープロファイルを作成し、その後、データベース接続に完全なユーザープロファイルを作成します。何らかの問題が発生してこの完全なユーザープロファイルを作成できない場合、"The user already exists" エラーが発生することがあります。

`DUPLICATED_USER` エラーは、ユーザーが Auth0 の内部ユーザーストアには存在するものの、テナントには存在しないことを示します。次の場合にこのエラーが発生することがあります。

* 複数の移行方法を使用しようとする (例：自動移行の後に一括ユーザーインポートを行う) 。
* データベース接続からユーザーを削除した後、そのユーザーを再作成しようとする。
* ユーザーが外部ユーザーストアにすでに存在している状態で、データベース接続に新しいユーザーを作成しようとする。

`DUPLICATED_USER` または "The user already exists" エラーを解決するには、次の手順を実行します。

1. [Actions リアルタイムログ](/docs/ja-jp/customize/actions/actions-real-time-logs) で `console.log()` の出力を確認します。

2. Management API の [Delete a User](https://auth0.com/docs/api/management/v2#!/Users/delete_users_by_id) エンドポイントを使用してユーザーを削除します。

3. Management API の [Delete a Connection User](https://auth0.com/docs/api/management/v2#!/Connections/delete_users_by_email) エンドポイントを使用してユーザーを削除します。

4. ユーザーに、移行を再試行するため、ログインするかパスワードを変更するよう案内します。

<div id="missing-metadata">
  ### メタデータの欠落
</div>

移行プロセスが開始されるログインまたはパスワード変更フローの途中でユーザーの操作が中断されると、Auth0 が他のプロファイルデータとあわせてそのメタデータ (`user_metadata` または `app_metadata`) を移行できない場合があります。

この問題は、ユーザーのプロファイルにメタデータがないことを確認し、外部ユーザーストアから取得して Auth0 に保存する [Action](/docs/ja-jp/customize/actions) を作成することで軽減できます。
