> ## Documentation Index
> Fetch the complete documentation index at: https://docs-staging-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Modèles de scripts Verify

> Décrit les modèles de scripts d’action de base de données personnalisés pour la vérification de l’adresse de courriel d’un utilisateur.

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

Ce script n’est utilisé que dans les scénarios d’authentification anciens et est nécessaire pour prendre en charge la vérification de l’adresse courriel de l’utilisateur. Une adresse courriel vérifiée est essentielle pour un certain nombre de scénarios de flux de travail dans Auth0, et l’implémentation de ce script permettra de les prendre en charge dès le départ.

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

## Fonction verify

La fonction `verify` doit effectuer ce qui suit :

* Mettre à jour l’attribut `email_verified` (ou équivalent) du profil de l’utilisateur dans la base de données externe.
* Renvoyer `true` si l’action de mise à jour a réussi.
* Renvoyer une erreur en cas d’échec.

### Définition

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

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

| Paramètre  | Type     | Description                                                                 |
| ---------- | -------- | --------------------------------------------------------------------------- |
| `email`    | chaîne   | adresse courriel de l’utilisateur.                                          |
| `callback` | Fonction | Utilisé pour transmettre des données d’erreur ou de profil par le pipeline. |

### Exemple

Il s’agit d’un exemple pseudo-JavaScript de la manière dont vous pourriez implémenter la fonction `login`. Pour des exemples spécifiques à un langage, consultez [Exemples de scripts spécifiques à un langage](https://auth0.com/docs/authenticate/database-connections/custom-db/templates/verify#language-specific-script-examples).

```javascript lines theme={null}
function verify(email, callback) {
  // Send email to external database API
  let options = {
    url: "https://example.com/api/verify",
    body: {
      email: email
    }
  };

  send(options, (err) => {
    // Return error in callback if update failed
    if (err) {
      return callback(new Error(email, "My custom error message."));
    } else {
      // Return true in callback if update succeeded
      return callback(null, true);
    }
  });
}
```

## Fonction callback

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

### Définition

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

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

| Paramètre  | Type    | Requis     | Description                                                                                                                                                                      |
| ---------- | ------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `error`    | Objet   | Requis     | Contient des données d’erreur.                                                                                                                                                   |
| `verified` | Booléen | Facultatif | Contient des valeurs qui représentent le statut de vérification de l’utilisateur dans la base de données externe (`true` ou `false`). Requis uniquement si la valeur est `true`. |

### Renvoyer un succès

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

<Warning>
  Le script de vérification 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 `rappel`.

  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 (Connexion)](https://auth0.com/docs/authenticate/database-connections/custom-db/templates/login) et [Get User (Obtenir un utilisateur)](https://auth0.com/docs/authenticate/database-connections/custom-db/templates/get-user).
</Warning>

#### Exemple

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

### Renvoyer une erreur

Si une erreur se produit, le paramètre `error` doit contenir des informations expliquant l’échec.

#### Exemple

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

## Exemples de scripts spécifiques à un langage

Auth0 fournit des exemples de scripts à utiliser 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)

### JavaScript

```javascript lines theme={null}
function verify(email, callback) {
  // This script should mark the current user's email address as verified in
  // your database.
  // It is executed whenever a user clicks the verification link sent by email.
  // These emails can be customized at https://manage.auth0.com/#/emails.
  // It is safe to assume that the user's email already exists in your database,
  // because verification emails, if enabled, are sent immediately after a
  // successful signup.
  //
  // There are two ways that this script can finish:
  // 1. The user's email was verified successfully
  //     callback(null, true);
  // 2. Something went wrong while trying to reach your database:
  //     callback(new Error("my error message"));
  //
  // If an error is returned, it will be passed to the query string of the page
  // where the user is being redirected to after clicking the verification link.
  // For example, returning `callback(new Error("error"))` and redirecting to
  // https://example.com would redirect to the following URL:
  //     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));
}
```

### ASP.NET Membership Provider (MVC3 - Universal Providers)

```javascript lines 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,
      // 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);
    verifyMembershipUser(email, function(err, wasUpdated) {
      if (err) return callback(err); // this will return a 500
      callback(null, wasUpdated);
    });
  });
  function verifyMembershipUser(email, callback) {
    // isApproved field is the email verification flag
    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);
  }
}
```

### ASP.NET Membership Provider (MVC4 - Simple Membership)

```javascript lines 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,
      // 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);
    verifyMembershipUser(email, function(err, wasUpdated) {
      if (err) return callback(err); // this will return a 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);
      // isConfirmed field is the email verification flag
      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);
    });
  }
}
```

### MongoDB

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

### MySQL

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

### PostgreSQL

```javascript lines theme={null}
function verify (email, 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 = 'UPDATE users SET email_Verified = true WHERE email_Verified = false AND email = $1';
    client.query(query, [email], function (err, result) {
      // NOTE: always call `done()` here to close
      // the connection to the database
      done();
      return callback(err, result && result.rowCount > 0);
    });
  });
}
```

### SQL Server

```javascript lines theme={null}
function verify (email, 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 = '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);
  });
}
```

### Base de données Azure SQL Windows

```javascript lines theme={null}
function verify (email, 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
    }
  });
  var query =
    'UPDATE Users SET Email_Verified=\'TRUE\' ' +
    'WHERE Email_Verified=\'FALSE\' AND Email=@Email';
  connection.on('debug', function(text) {
    // Uncomment next line in order to enable debugging messages
    // console.log(text);
  }).on('errorMessage', function(text) {
    console.log(JSON.stringify(text, null, 2));
  }).on('infoMessage', function(text) {
    // Uncomment next line in order to enable information messages
    // 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);
  });
}
```

## En savoir plus

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