Modèles de scripts Verify
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
:
verify(email, callback): function
Was this helpful?
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.
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);
}
});
}
Was this helpful?
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 :
callback(error, [verified]): function
Was this helpful?
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
.
Exemple
callback(null, true);
Was this helpful?
Renvoyer une erreur
Si une erreur se produit, le paramètre error
doit contenir des informations expliquant l’échec.
Exemple
return callback(new Error("My custom error message."));
Was this helpful?
Exemples de scripts spécifiques à un langage
Auth0 fournit des exemples de scripts à utiliser pour les langages/technologies suivants :
JavaScript
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));
}
Was this helpful?
ASP.NET Membership Provider (MVC3 - Universal Providers)
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);
}
}
Was this helpful?
ASP.NET Membership Provider (MVC4 - Simple Membership)
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);
});
}
}
Was this helpful?
MongoDB
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);
});
});
}
Was this helpful?
MySQL
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);
});
}
Was this helpful?
PostgreSQL
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);
});
});
}
Was this helpful?
SQL Server
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);
});
}
Was this helpful?
Base de données Azure SQL Windows
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);
});
}
Was this helpful?