> ## 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.

# ユーザー削除データベースアクションスクリプトとテンプレート

> Deleteスクリプトは、外部ユーザーストアから指定したユーザーを削除する必要があるときに実行され、同じ操作でAuth0からもユーザーを削除する場合に必要です。

Deleteスクリプトでは、外部データベースから指定したユーザーを削除するための関数を実装します。この関数名は `deleteUser` にすることを推奨します。

このスクリプトは、[レガシー認証のシナリオ](/docs/ja-jp/authenticate/database-connections/custom-db/overview-custom-db-connections)でのみ使用され、Auth0 と外部データベースの両方から同じ操作でユーザーを削除する場合に必要です。

<div id="deleteuser-function">
  ## DeleteUser 関数
</div>

`deleteUser` 関数では、次の処理を行う必要があります。

* 指定されたユーザーを外部データベースから削除すること。
* 削除に成功した場合は `null` を返すこと。
* 削除に失敗した場合はエラーを返すこと。

<div id="definition">
  ### 定義
</div>

`deleteUser` 関数は、2つのパラメータを受け取り、`callback` コールバック関数を返します。

```js lines theme={null}
deleteUser(id, callback): function
```

| パラメータ      | 型        | 説明                                       |
| ---------- | -------- | ---------------------------------------- |
| `id`       | String   | ユーザーのアイデンティティ `user_id`。`auth0` で始まりません。 |
| `callback` | Function | パイプラインを通じてエラーまたはプロファイルデータを渡すために使用します。    |

これは、`deleteUser` 関数の実装方法を示す擬似的な JavaScript の例です：

```javascript lines theme={null}
function deleteUser(id, callback) {
  // 外部データベースAPIにユーザー識別子を送信する
  let options = {
    url: "https://example.com/api/deleteUser",
    body: {
      id: id
    }
  };

  send(options, (err, profileData) => {
    // 削除に失敗した場合はコールバックでエラーを返す
    if (err) {
      return callback(new Error("My custom error message."));
    }

    // 削除に成功した場合はコールバックでnull値を返す
    return callback(null);
  });
}
```

<div id="callback-function">
  ## コールバック関数
</div>

`callback` コールバック関数は 1 つの引数を受け取り、関数を返します。

<div id="definition">
  ### 定義
</div>

```js lines theme={null}
callback(error): function
```

| パラメーター  | 型      | 必須 | 説明               |
| ------- | ------ | -- | ---------------- |
| `error` | オブジェクト | 必須 | エラーに関するデータを含みます。 |

<div id="return-a-success">
  ### 成功を返す
</div>

ユーザーが外部データベースで正常に削除された場合は、`callback` コールバック関数を返し、`error` パラメータには `null` を渡します：

```js lines theme={null}
return callback(null);
```

<div id="return-an-error">
  ### エラーを返す
</div>

エラーが発生した場合は、`callback` コールバック関数を返し、`error` パラメータに関連するエラー情報を渡します：

```js lines theme={null}
return callback(new Error("My custom error message."));
```

<div id="language-specific-script-examples">
  ## 言語別のスクリプト例
</div>

Auth0 では、以下の言語/テクノロジー向けのサンプルスクリプトを提供しています。

<CodeGroup>
  ```javascript JavaScript lines theme={null}
  function remove (id, callback) {
    // このスクリプトは、既存のデータベースからユーザーを削除します。
    // Management APIまたはAuth0 Dashboardからユーザーが削除されるたびに実行されます。
    //
    // このスクリプトの完了方法は2通りあります。
    // 1. ユーザーが正常に削除された場合:
    //     callback(null);
    // 2. データベースへの接続中に問題が発生した場合:
    //     callback(new Error("my error message"));
    var msg = "Please implement the Delete script for this database " +
         "connection at https://manage.auth0.com/#/connections/database";
    return callback(new Error(msg));
  }
  ```

  ```javascript ASP.NET MVC3 lines expandable theme={null}
  // ASP.NET Membership Provider（MVC3 - Universal Providers）用
  function remove(id, callback) {
    const sqlserver = require('tedious@1.11.0');
    const Connection = sqlserver.Connection;
    const Request = sqlserver.Request;
    const TYPES = sqlserver.TYPES;
    const connection = new Connection({
      userName: 'the username',
      password: 'the password',
      server: 'the server',
      options: {
        database: 'the db name',
        encrypt: true,
        // メンバーシップエンティティの作成に必要なuserIdを取得するために必要
        rowCollectionOnRequestCompletion: true
      }
    });
    connection.on('debug', function(text) {
      // 接続に問題がある場合は、より詳細な情報を得るためにコメントアウトを解除してください
      // console.log(text);
    }).on('errorMessage', function(text) {
      // SQLデータベースへの接続時またはSQL文の実行時にエラーが表示されます
      console.log(JSON.stringify(text));
    });
    connection.on('connect', function(err) {
      if (err) return callback(err);
      executeDelete(['Memberships', 'Users'], function(err) {
        if (err) return callback(err);
        callback(null);
      });
    });
    function executeDelete(tables, callback) {
      const query = tables.map(function(table) {
        return 'DELETE FROM ' + table + ' WHERE UserId = @UserId';
      }).join(';');
      const request = new Request(query, function(err) {
        if (err) return callback(err);
        callback(null);
      });
      request.addParameter('UserId', TYPES.VarChar, id);
      connection.execSql(request);
    }
  }
  ```

  ```javascript ASP.NET MVC4 lines expandable theme={null}
  // ASP.NET Membership Provider（MVC4 - Simple Membership）用
  function remove(id, callback) {
    const sqlserver = require('tedious@1.11.0');
    const Connection = sqlserver.Connection;
    const Request = sqlserver.Request;
    const TYPES = sqlserver.TYPES;
    const connection = new Connection({
      userName: 'the username',
      password: 'the password',
      server: 'the server',
      options: {
        database: 'the db name',
        encrypt: true,
        // メンバーシップエンティティの作成に必要なuserIdを取得するために必要
        rowCollectionOnRequestCompletion: true
      }
    });
    connection.on('debug', function (text) {
      // 接続に問題がある場合は、より詳細な情報を得るためにコメントアウトを解除してください
      // console.log(text);
    }).on('errorMessage', function (text) {
      // SQLデータベースへの接続時またはSQL文の実行時にエラーが表示されます
      console.log(JSON.stringify(text));
    });
    connection.on('connect', function (err) {
      if (err) return callback(err);
      executeDelete(['webpages_Membership', 'UserProfile'], function (err) {
        if (err) return callback(err);
        callback(null);
      });
    });
    function executeDelete(tables, callback) {
      const query = tables.map(function (table) {
        return 'DELETE FROM ' + table + ' WHERE UserId = @UserId';
      }).join(';');
      const request = new Request(query, function (err) {
        if (err) return callback(err);
        callback(null);
      });
      request.addParameter('UserId', TYPES.VarChar, id);
      connection.execSql(request);
    }
  }
  ```

  ```javascript MongoDB lines theme={null}
  function remove(id, callback) {
    const MongoClient = require('mongodb@3.1.4').MongoClient;
    const client = new MongoClient('mongodb://user:pass@mymongoserver.com');
    client.connect(function (err) {
      if (err) return callback(err);
      const db = client.db('db-name');
      const users = db.collection('users');
      users.remove({ _id: id }, function (err) {
        client.close();
        if (err) return callback(err);
        callback(null);
      });
    });
  }
  ```

  ```javascript MySQL lines theme={null}
  function remove(id, callback) {
    const mysql = require('mysql');
    const connection = mysql({
      host: 'localhost',
      user: 'me',
      password: 'secret',
      database: 'mydb'
    });
    connection.connect();
    const query = 'DELETE FROM users WHERE id = ?';
    connection.query(query, [ id ], function(err) {
      if (err) return callback(err);
      callback(null);
    });
  }
  ```

  ```javascript PostgreSQL lines theme={null}
  function remove(id, callback) {
    //この例では「pg」ライブラリを使用します
    //詳細: https://github.com/brianc/node-postgres
    const postgres = require('pg');
    const conString = 'postgres://user:pass@localhost/mydb';
    postgres.connect(conString, function (err, client, done) {
      if (err) return callback(err);
      const query = 'DELETE FROM users WHERE id = $1';
      client.query(query, [id], function (err) {
        // 注: データベース接続を閉じるため、ここでは必ず`done()`を呼び出してください
        done();
        return callback(err);
      });
    });
  }
  ```

  ```javascript SQL Server lines expandable theme={null}
  function remove(id, callback) {
    // この例では「tedious」ライブラリを使用しています
    // 詳細はこちら: http://pekim.github.io/tedious/index.html
    const sqlserver = require('tedious@1.11.0');
    const Connection = sqlserver.Connection;
    const Request = sqlserver.Request;
    const TYPES = sqlserver.TYPES;
    const connection = new Connection({
      userName:  'test',
      password:  'test',
      server:    'localhost',
      options:  {
        database: 'mydb'
      }
    });
    const query = 'DELETE FROM dbo.Users WHERE id = @UserId';
    connection.on('debug', function (text) {
      console.log(text);
    }).on('errorMessage', function (text) {
      console.log(JSON.stringify(text, null, 2));
    }).on('infoMessage', function (text) {
      console.log(JSON.stringify(text, null, 2));
    });
    connection.on('connect', function (err) {
      if (err) return callback(err);
      const request = new Request(query, function (err) {
        if (err) return callback(err);
        callback(null);
      });
      request.addParameter('UserId', TYPES.VarChar, id);
      connection.execSql(request);
    });
  }
  ```

  ```javascript Azure SQL Database lines expandable theme={null}
  function remove (id, callback) {
    // この例では「tedious」ライブラリを使用します
    // 詳細はこちら: http://pekim.github.io/tedious/index.html
    var Connection = require('tedious@1.11.0').Connection;
    var Request = require('tedious@1.11.0').Request;
    var TYPES = require('tedious@1.11.0').TYPES;
    var connection = new Connection({
      userName: 'your-user@your-server-id.database.windows.net',
      password: 'the-password',
      server: 'your-server-id.database.windows.net',
      options: {
        database: 'mydb',
        encrypt: true
      }
    });
    connection.on('debug', function (text) {
      console.log(text);
    }).on('errorMessage', function (text) {
      console.log(JSON.stringify(text, null, 2));
    }).on('infoMessage', function (text) {
      console.log(JSON.stringify(text, null, 2));
    });
    connection.on('connect', function (err) {
      if (err) { return callback(err); }
      var query = 'DELETE FROM users WHERE id = @UserId';
      var request = new Request(query, function (err) {
        if (err) { return callback(err); }
        callback(null);
      });
      request.addParameter('UserId', TYPES.VarChar, id);
      connection.execSql(request);
    });
  }
  ```
</CodeGroup>
