deleteUser という名前を付けることを推奨します。
このスクリプトは、レガシー認証シナリオでのみ使用されます。Auth0 と外部データベースの両方から同じ操作でユーザーを削除する場合に必要です。
DeleteUser 関数
deleteUser 関数では、次の処理を行う必要があります。
- 指定したユーザーを外部データベースから削除する。
- 削除に成功した場合は
nullを返す。 - 削除に失敗した場合はエラーを返す。
定義
deleteUser 関数は 2 つのパラメーターを受け取り、callback 関数を返します。
deleteUser(id, callback): function
| Parameter | Type | Description |
|---|---|---|
id | String | ユーザーの識別子 user_id。auth0 では始まりません。 |
callback | Function | エラーまたはプロファイルデータをパイプラインに渡すために使用します。 |
例
これは、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
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
error | Object | 必須 | エラーデータが含まれます。 |
成功を返す
callback 関数を返し、error パラメーターには null を渡します。
例
return callback(null);
エラーを返す
callback 関数を呼び出し、関連するエラー情報を error パラメーターに渡します。
例
return callback(new Error("My custom error message."));
言語別のスクリプト例
- JavaScript
- ASP.NET Membership Provider (MVC3 - Universal Providers)
- ASP.NET Membership Provider (MVC4 - Simple Membership)
- MongoDB
- MySQL
- PostgreSQL
- SQL Server
- Windows Azure SQL Database
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);
});
}