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

# Modèles de script de suppression

> Cet article décrit les modèles de scripts d’action personnalisés des bases de données pour la suppression des utilisateurs.

Le script de suppression met en œuvre la fonction définie pour supprimer un utilisateur donné d’une base de données externe. Il est recommandé de nommer cette fonction `deleteUser`.

Le script est seulement utilisé dans un [scénario d’authentification héritée](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/overview-custom-db-connections), et est exigé si vous souhaitez supprimer un utilisateur d’Auth0 et de votre base de données externe au cours de la même opération.

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

La fonction `deleteUser` permet de :

* Supprimer l’utilisateur indiqué de la base de données externe.
* Renvoyer une valeur `nulle` si la suppression a abouti.
* Renvoyer un message d’erreur en cas d’échec.

<div id="definition">
  ### Définition
</div>

La fonction `deleteUser` accepte deux paramètres et renvoie une fonction de `callback` :

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

<table class="table">
  <thead>
    <tr>
      <th><strong>Paramètre</strong></th>
      <th><strong>Type</strong></th>
      <th><strong>Description</strong></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`id`</td>
      <td>Chaîne</td>
      <td>Identité de l’utilisateur `user_id`. Ne commence pas par `auth0`.</td>
    </tr>

    <tr>
      <td>`callback`</td>
      <td>Fonction</td>
      <td>Utilisée pour transmettre les données d’erreur ou de profil dans le pipeline.</td>
    </tr>
  </tbody>
</table>

### Exemple

Voici un exemple fictif en JavaScript de la manière dont vous pourriez implémenter la fonction  `deleteUser`. Pour voir des exemples propres à une langue, consulter [Exemples de scripts propres à une langue](https://auth0.com/docs/authenticate/database-connections/custom-db/templates/delete#language-specific-script-examples).

```javascript lines theme={null}
function deleteUser(id, callback) {
  // Send user identifier to external database API
  let options = {
    url: "https://example.com/api/deleteUser",
    body: {
      id: id
    }
  };

  send(options, (err, profileData) => {
    // Return error in callback if deletion failed
    if (err) {
      return callback(new Error("My custom error message."));
    }

    // Return null value in callback if deletion succeeded
    return callback(null);
  });
}
```

<div id="callback-function">
  ## Fonction de rappel
</div>

La fonction de `callback` accepte un paramètre et renvoie une fonction.

<div id="definition">
  ### Définition
</div>

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

<table class="table">
  <thead>
    <tr>
      <th><strong>Paramètre</strong></th>
      <th><strong>Type</strong></th>
      <th><strong>Requis</strong></th>
      <th><strong>Description</strong></th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>`error`</td>
      <td>Objet</td>
      <td>Requis</td>
      <td>Contient des données d’erreur.</td>
    </tr>
  </tbody>
</table>

<div id="return-a-success">
  ### Retourne un succès
</div>

Si l’utilisateur a été correctement supprimé dans votre base de données externe, renvoyez la fonction de `callback` et transmettez une valeur `nulle` pour le paramètre `error`.

<div id="example">
  #### Exemple
</div>

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

<div id="return-an-error">
  ### Renvoyer une erreur
</div>

Si une erreur survient, renvoyez la fonction de `callback`, et transmettez l’information pertinente concernant l’erreur au paramètre `error` :

<div id="example">
  #### Exemple
</div>

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

<div id="language-specific-script-examples">
  ## Exemples de scripts propres à une langue
</div>

Auth0 fournit des exemples de scripts à utiliser avec les langages/technologies ci-dessous :

* [JavaScript](#javascript)
* [Fournisseur d’appartenances ASP.NET (MVC3 – Fournisseurs universels)](#asp-net-membership-provider-mvc3-universal-providers-)
* [Fournisseur d’appartenances ASP.NET (MVC4 – Appartenance simple)](#asp-net-membership-provider-mvc4-simple-membership-)
* [MongoDB](#mongodb)
* [MySQL](#mysql)
* [PostgreSQL](#postgresql)
* [Serveur SQL](#sql-server)
* [Base de données SQL Windows Azure](#windows-azure-sql-database)

<div id="javascript">
  ### JavaScript
</div>

```javascript lines theme={null}
function remove (id, callback) {
  // This script remove a user from your existing database.
  // It is executed whenever a user is deleted from the Management API or Auth0 dashboard.
  //
  // There are two ways that this script can finish:
  // 1. The user was removed successfully:
  //     callback(null);
  // 2. Something went wrong while trying to reach your database:
  //     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));
}
```

<div id="aspnet-membership-provider-mvc3-universal-providers">
  ### Fournisseur d’appartenances ASP.NET (MVC3 – Fournisseurs universels)
</div>

```javascript lines theme={null}
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,
      // Required to retrieve userId needed for Membership entity creation
      rowCollectionOnRequestCompletion: true
    }
  });
  connection.on('debug', function(text) {
    // if you have connection issues, uncomment this to get more detailed info
    // console.log(text);
  }).on('errorMessage', function(text) {
    // this will show any errors when connecting to the SQL database or with the SQL statements
    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);
  }
}
```

<div id="aspnet-membership-provider-mvc4-simple-membership">
  ### Fournisseur d’appartenances ASP.NET (MVC4 – Appartenance simple)
</div>

```javascript lines theme={null}
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,
      // Required to retrieve userId needed for Membership entity creation
      rowCollectionOnRequestCompletion: true
    }
  });
  connection.on('debug', function (text) {
    // if you have connection issues, uncomment this to get more detailed info
    // console.log(text);
  }).on('errorMessage', function (text) {
    // this will show any errors when connecting to the SQL database or with the SQL statements
    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);
  }
}
```

<div id="mongodb">
  ### MongoDB
</div>

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

<div id="mysql">
  ### MySQL
</div>

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

<div id="postgresql">
  ### PostgreSQL
</div>

```javascript lines theme={null}
function remove(id, callback) {
  //this example uses the "pg" library
  //more info here: 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) {
      // NOTE: always call `done()` here to close
      // the connection to the database
      done();
      return callback(err);
    });
  });
}
```

<div id="sql-server">
  ### Serveur SQL
</div>

```javascript lines theme={null}
function remove(id, callback) {
  // this example uses the "tedious" library
  // more info here: 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);
  });
}
```

<div id="windows-azure-sql-database">
  ### Base de données SQL de Windows Azure
</div>

```javascript lines theme={null}
function remove (id, callback) {
  // this example uses the "tedious" library
  // more info here: 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);
  });
}
```

<div id="learn-more">
  ## En savoir plus
</div>

* [Modifier les modèles de script de mot de passe](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/templates/change-password)
* [Créer des modèles de script](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/templates/create)
* [Modèles de script Get User](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/templates/get-user)
* [Modèles de script de connexion](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/templates/login)
* [Modèles de scripts Verify](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/templates/verify)
* [Modifier le modèle de script de courriel](/docs/fr-CA/fr-ca/authenticate/database-connections/custom-db/templates/change-email)
