メインコンテンツへスキップ
Delete スクリプトは、定義された関数を実装し、指定したユーザーを外部データベースから削除します。この関数には deleteUser という名前を付けることを推奨します。 このスクリプトは、レガシー認証シナリオでのみ使用されます。Auth0 と外部データベースの両方から同じ操作でユーザーを削除する場合に必要です。

DeleteUser 関数

deleteUser 関数では、次の処理を行う必要があります。
  • 指定したユーザーを外部データベースから削除する。
  • 削除に成功した場合は null を返す。
  • 削除に失敗した場合はエラーを返す。

定義

deleteUser 関数は 2 つのパラメーターを受け取り、callback 関数を返します。
deleteUser(id, callback): function
ParameterTypeDescription
idStringユーザーの識別子 user_idauth0 では始まりません。
callbackFunctionエラーまたはプロファイルデータをパイプラインに渡すために使用します。

これは、deleteUser 関数の実装方法を示す擬似 JavaScript の例です。言語固有の例については、言語別のスクリプト例 を参照してください。
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);
  });
}

callback 関数

callback 関数は 1 つのパラメーターを受け取り、別の関数を返します。

定義

callback(error): function
パラメーター必須説明
errorObject必須エラーデータが含まれます。

成功を返す

外部データベースでユーザーを正常に削除できた場合は、callback 関数を返し、error パラメーターには null を渡します。

return callback(null);

エラーを返す

エラーが発生した場合は、callback 関数を呼び出し、関連するエラー情報を error パラメーターに渡します。

return callback(new Error("My custom error message."));

言語別のスクリプト例

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

JavaScript

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));
}

ASP.NET メンバーシップ プロバイダー (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,
      // Membershipエンティティの作成に必要な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);
  }
}

ASP.NET メンバーシップ プロバイダー (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,
      // Membershipエンティティの作成に必要な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);
  }
}

MongoDB

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);
    });
  });
}

MySQL

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);
  });
}

PostgreSQL

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);
    });
  });
}

SQL Server

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);
  });
}

Windows Azure SQL Database

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);
  });
}

詳細情報