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

> Décrit les modèles de script Verify pour les actions de base de données personnalisée liées à la vérification du courriel de l’utilisateur.

# Modèles de script Verify

Le script Verify implémente la fonction exécutée pour indiquer l’état de vérification du courriel d’un utilisateur dans une base de données externe. Nous recommandons de nommer cette fonction `verify`.

Ce script est utilisé uniquement dans les scénarios d’authentification hérités et il est nécessaire pour prendre en charge la vérification du courriel de l’utilisateur. Une adresse courriel vérifiée est essentielle à plusieurs flux de travail dans Auth0, et l’implémentation de ce script ajoute cette prise en charge d’emblée.

S’il est activé, ce script s’exécute lorsqu’un utilisateur clique sur le lien contenu dans le courriel de vérification envoyé par Auth0.

<div id="verify-function">
  ## Fonction `verify`
</div>

La fonction `verify` doit :

* Mettre à jour l’attribut `email_verified` (ou son équivalent) dans le profil de l’utilisateur de la base de données externe.
* Retourner `true` si la mise à jour a réussi.
* Retourner une erreur si la mise à jour a échoué.

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

La fonction `verify` accepte deux paramètres et retourne une fonction `callback` :

```js lines theme={null}
verify(email, callback): function
```

| Paramètre  | Type     | Description                                                                  |
| ---------- | -------- | ---------------------------------------------------------------------------- |
| `email`    | String   | Adresse de courriel de l’utilisateur.                                        |
| `callback` | Function | Permet de transmettre les erreurs ou les données de profil dans le pipeline. |

### Exemple

Voici un exemple en pseudo-JavaScript illustrant comment vous pourriez implémenter la fonction `login`. Pour des exemples propres à chaque langage, consultez [exemple de script par langage](/fr-CA/docs/authenticate/database-connections/custom-db/templates/verify#language-specific-script-examples).

```javascript lines theme={null}
function verify(email, callback) {
  // Envoyer le courriel à l'API de base de données externe
  let options = {
    url: "https://example.com/api/verify",
    body: {
      email: email
    }
  };

  send(options, (err) => {
    // Retourner une erreur dans le rappel si la mise à jour a échoué
    if (err) {
      return callback(new Error(email, "My custom error message."));
    } else {
      // Retourner true dans le rappel si la mise à jour a réussi
      return callback(null, true);
    }
  });
}
```

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

La fonction `callback` sert à transmettre les données de profil de l’utilisateur ou les données d’erreur dans le pipeline.

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

La fonction `callback` peut accepter jusqu’à deux paramètres et renvoie une fonction :

```js lines theme={null}
callback(error, [verified]): function
```

| Paramètre  | Type    | Obligatoire | Description                                                                                                                                                                  |
| ---------- | ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `error`    | Object  | Obligatoire | Contient les données d’erreur.                                                                                                                                               |
| `verified` | Boolean | Facultatif  | Contient une valeur qui indique l’état de vérification de l’utilisateur dans la base de données externe (`true` ou `false`). Obligatoire uniquement si la valeur est `true`. |

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

Si le statut de vérification de l’utilisateur a été mis à jour avec succès dans la base de données externe, transmettez la valeur `null` pour le paramètre `error` et la valeur `true` pour le paramètre `verified`.

<Warning>
  Le script Verify ne modifie pas la valeur de l’attribut `email_verified` dans le profil Auth0 de l’utilisateur, quelle que soit la valeur renvoyée dans la fonction `callback`.

  Pour mettre à jour l’attribut `email_verified` dans le profil Auth0 de l’utilisateur, vous devez inclure l’attribut `email_verified` et sa valeur dans l’objet de profil utilisateur renvoyé dans les scripts [Login](/fr-CA/docs/authenticate/database-connections/custom-db/templates/login) et [Get User](/fr-CA/docs/authenticate/database-connections/custom-db/templates/get-user).
</Warning>

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

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

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

Si une erreur se produit, le paramètre `error` doit contenir des renseignements pertinents sur la nature de l’erreur.

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

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

<div id="language-specific-script-examples">
  ## Exemples de scripts par langage
</div>

Auth0 fournit des scripts d’exemple pour les langages/technologies suivants :

* [JavaScript](#javascript)
* [ASP.NET Membership Provider (MVC3 - Universal Providers)](#asp-net-membership-provider-mvc3-universal-providers-)
* [ASP.NET Membership Provider (MVC4 - Simple Membership)](#asp-net-membership-provider-mvc4-simple-membership-)
* [MongoDB](#mongodb)
* [MySQL](#mysql)
* [PostgreSQL](#postgresql)
* [SQL Server](#sql-server)
* [Windows Azure SQL Database](#windows-azure-sql-database)

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

```javascript lines theme={null}
function verify(email, callback) {
  // Ce script doit marquer l'adresse courriel de l'utilisateur actuel comme vérifiée dans
  // votre base de données.
  // Il est exécuté chaque fois qu'un utilisateur clique sur le lien de vérification envoyé par courriel.
  // Ces courriels peuvent être personnalisés à l'adresse https://manage.auth0.com/#/emails.
  // On peut supposer sans risque que l'adresse courriel de l'utilisateur existe déjà dans votre base de données,
  // car les courriels de vérification, s'ils sont activés, sont envoyés immédiatement après
  // une inscription réussie.
  //
  // Ce script peut se terminer de deux façons :
  // 1. L'adresse courriel de l'utilisateur a été vérifiée avec succès
  //     callback(null, true);
  // 2. Un problème est survenu lors de la tentative d'accès à votre base de données :
  //     callback(new Error("my error message"));
  //
  // Si une erreur est retournée, elle sera transmise à la chaîne de requête de la page
  // vers laquelle l'utilisateur est redirigé après avoir cliqué sur le lien de vérification.
  // Par exemple, retourner `callback(new Error("error"))` et rediriger vers
  // https://example.com redirigera vers l'URL suivante :
  //     https://example.com?email=alice%40example.com&message=error&success=false
  const msg = 'Please implement the Verify 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">
  ### ASP.NET Membership Provider (MVC3 - fournisseurs universels)
</div>

```javascript lines expandable theme={null}
function verify(email, 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,
      // Requis pour récupérer l'userId nécessaire à la création de l'entité Membership
      rowCollectionOnRequestCompletion: true
    }
  });
  connection.on('debug', function(text) {
    // en cas de problèmes de connexion, décommentez ceci pour obtenir des informations plus détaillées
    //console.log(text);
  }).on('errorMessage', function(text) {
    // affiche toutes les erreurs lors de la connexion à la base de données SQL ou avec les instructions SQL
    console.log(JSON.stringify(text));
  });
  connection.on('connect', function(err) {
    if (err) return callback(err);
    verifyMembershipUser(email, function(err, wasUpdated) {
      if (err) return callback(err); // retournera un 500
      callback(null, wasUpdated);
    });
  });
  function verifyMembershipUser(email, callback) {
    // le champ isApproved est l'indicateur de vérification du courriel
    const updateMembership =
      'UPDATE Memberships SET isApproved = \'true\' ' +
      'WHERE isApproved = \'false\' AND Email = @Email';
    const updateMembershipQuery = new Request(updateMembership, function(err, rowCount) {
      if (err) {
        return callback(err);
      }
      callback(null, rowCount > 0);
    });
    updateMembershipQuery.addParameter('Email', TYPES.VarChar, email);
    connection.execSql(updateMembershipQuery);
  }
}
```

<div id="aspnet-membership-provider-mvc4-simple-membership">
  ### ASP.NET Membership Provider (MVC4 - Simple Membership)
</div>

```javascript lines expandable theme={null}
function verify (email, 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,
      // Requis pour récupérer l'userId nécessaire à la création de l'entité Membership
      rowCollectionOnRequestCompletion: true
    }
  });
  connection.on('debug', function(text) {
    // si vous avez des problèmes de connexion, décommentez ceci pour obtenir des informations plus détaillées
    //console.log(text);
  }).on('errorMessage', function(text) {
    // affiche toutes les erreurs lors de la connexion à la base de données SQL ou avec les instructions SQL
    console.log(JSON.stringify(text));
  });
  connection.on('connect', function (err) {
    if (err) return callback(err);
    verifyMembershipUser(email, function(err, wasUpdated) {
      if (err) return callback(err); // retournera un 500
      callback(null, wasUpdated);
    });
  });
  function findUserId(email, callback) {
    const findUserIdFromEmail =
      'SELECT UserProfile.UserId FROM ' +
      'UserProfile INNER JOIN webpages_Membership ' +
      'ON UserProfile.UserId = webpages_Membership.UserId ' +
      'WHERE UserName = @Username';
    const findUserIdFromEmailQuery = new Request(findUserIdFromEmail, function (err, rowCount, rows) {
      if (err || rowCount < 1) return callback(err);
      const userId = rows[0][0].value;
      callback(null, userId);
    });
    findUserIdFromEmailQuery.addParameter('Username', TYPES.VarChar, email);
    connection.execSql(findUserIdFromEmailQuery);
  }
  function verifyMembershipUser(email, callback) {
    findUserId(email, function (err, userId) {
      if (err || !userId) return callback(err);
      // le champ isConfirmed est l'indicateur de vérification du courriel
      const updateMembership =
        'UPDATE webpages_Membership SET isConfirmed = \'true\' ' +
        'WHERE isConfirmed = \'false\' AND UserId = @UserId';
      const updateMembershipQuery = new Request(updateMembership, function (err, rowCount) {
        return callback(err, rowCount > 0);
      });
      updateMembershipQuery.addParameter('UserId', TYPES.VarChar, userId);
      connection.execSql(updateMembershipQuery);
    });
  }
}
```

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

```javascript lines theme={null}
function verify (email, 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');
    const query = { email: email, email_verified: false };
    users.update(query, { $set: { email_verified: true } }, function (err, count) {
      client.close();
      if (err) return callback(err);
      callback(null, count > 0);
    });
  });
}
```

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

```javascript lines theme={null}
function verify(email, callback) {
  const mysql = require('mysql');
  const connection = mysql({
    host: 'localhost',
    user: 'me',
    password: 'secret',
    database: 'mydb'
  });
  connection.connect();
  const query = 'UPDATE users SET email_Verified = true WHERE email_Verified = false AND email = ?';
  connection.query(query, [ email ], function(err, results) {
    if (err) return callback(err);
    callback(null, results.length > 0);
  });
}
```

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

```javascript lines theme={null}
function verify (email, callback) {
  //cet exemple utilise la bibliothèque "pg"
  //plus d'informations ici : 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 = 'UPDATE users SET email_Verified = true WHERE email_Verified = false AND email = $1';
    client.query(query, [email], function (err, result) {
      // REMARQUE : appelez toujours `done()` ici pour fermer
      // la connexion à la base de données
      done();
      return callback(err, result && result.rowCount > 0);
    });
  });
}
```

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

```javascript lines expandable theme={null}
function verify (email, callback) {
  //cet exemple utilise la bibliothèque "tedious"
  //plus d'informations ici : 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 = 'UPDATE dbo.Users SET Email_Verified = true WHERE Email_Verified = false AND Email = @Email';
  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, rows) {
      if (err) return callback(err);
      callback(null, rows > 0);
    });
    request.addParameter('Email', TYPES.VarChar, email);
    connection.execSql(request);
  });
}
```

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

```javascript lines expandable theme={null}
function verify (email, callback) {
  //cet exemple utilise la bibliothèque "tedious"
  //plus d'informations ici : 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
    }
  });
  var query =
    'UPDATE Users SET Email_Verified=\'TRUE\' ' +
    'WHERE Email_Verified=\'FALSE\' AND Email=@Email';
  connection.on('debug', function(text) {
    // Décommenter la ligne suivante pour activer les messages de débogage
    // console.log(text);
  }).on('errorMessage', function(text) {
    console.log(JSON.stringify(text, null, 2));
  }).on('infoMessage', function(text) {
    // Décommenter la ligne suivante pour activer les messages d'information
    // console.log(JSON.stringify(text, null, 2));
  });
  connection.on('connect', function (err) {
    if (err) { return callback(err); }
    var request = new Request(query, function (err, rows) {
      if (err) { return callback(err); }
      console.log('rows: ' + rows);
      callback(null, rows > 0);
    });
    request.addParameter('Email', TYPES.VarChar, email);
    connection.execSql(request);
  });
}
```

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

* [Modèles de script de connexion](/fr-CA/docs/authenticate/database-connections/custom-db/templates/login)
* [Modèles de script de récupération de l’utilisateur](/fr-CA/docs/authenticate/database-connections/custom-db/templates/get-user)
* [Modèles de script de création](/fr-CA/docs/authenticate/database-connections/custom-db/templates/create)
* [Modèles de script de suppression](/fr-CA/docs/authenticate/database-connections/custom-db/templates/delete)
* [Modèles de script de changement de mot de passe](/fr-CA/docs/authenticate/database-connections/custom-db/templates/change-password)
* [Modèle de script de changement de courriel](/fr-CA/docs/authenticate/database-connections/custom-db/templates/change-email)
