Décrit les modèles de scripts d’action de base de données personnalisés pour la recherche des utilisateurs.
Le script Get User permet d’implémenter la fonction exécutée pour déterminer l’état actuel d’existence d’un utilisateur. Nous recommandons de nommer cette fonction getUser.Ce script est requis pour la migration automatique, et conditionnellement requis pour l’authentification héritée en fonction des opérations configurées pour la connexion.Si la migration automatique est configurée pour la connexion et que le profil utilisateur n’a pas encore été créé, le script est exécuté chaque fois que les opérations suivantes se produisent :
Modifier l’adresse courriel
Inscription
Réinitialisation du mot de passe
Si l’authentification héritée est configurée pour la connexion, le script est exécuté chaque fois que les opérations suivantes se produisent :
Voici un exemple fictif en JavaScript de la manière dont vous pourriez implémenter la fonction getUser. Pour voir des exemples propres à un langage, veuillez consulter Exemples de scripts propres à une langue.
Signaler un code incorrect
Copier
Demander à l'IA
function getUser(email, callback) { // Send user identifier to external database API let options = { url: "https://example.com/api/search-users", body: { email: email } }; send(options, (err, profileData) => { // Return error in callback if there was an issue finding the user if (err) { return callback(new Error("Could not determine if user exists or not.")); } else { // Return null in callback if user was not found, return profile data in callback if user was found if (!profileData) { return callback(null); } else { let profile = { email: profileData.email, user_id: profileData.userId }; return callback(null, profile); } } });}
Renvoyer le profil utilisateur (utilisateur trouvé)
Les données de profil renvoyées par le script d’obtention d’un utilisateur doivent être cohérentes avec les données de profil renvoyées par le script de connexion.
Si l’utilisateur est trouvé, transmettez une valeur nul au paramètre error et transmettez les données de profil de l’utilisateur au paramètre profile dans la forme normalisée. Outre les champs standard, vous pouvez inclure les champs user_metadata, app_metadata et mfa_factors.
Si une erreur se produit, transmettez les données d’erreur au paramètre error avec les informations pertinentes sur ce qui a mal tourné. Pour plus d’informations, veuillez consulter Dépannage des bases de données personnalisées.
function getByEmail(email, callback) { // This script should retrieve a user profile from your existing database, // without authenticating the user. // It is used to check if a user exists before executing flows that do not // require authentication (signup and password reset). // // There are three ways this script can finish: // 1. A user was successfully found. The profile should be in the following // format: https://auth0.com/docs/users/normalized/auth0/normalized-user-profile-schema. // callback(null, profile); // 2. A user was not found // callback(null); // 3. Something went wrong while trying to reach your database: // callback(new Error("my error message")); const msg = 'Please implement the Get User script for this database connection ' + 'at https://manage.auth0.com/#/connections/database'; return callback(new Error(msg));}
Fournisseur d’appartenances ASP.NET (MVC3 – Fournisseurs universels)
Signaler un code incorrect
Copier
Demander à l'IA
function getByEmail(email, callback) { const sqlserver = require('[email protected]'); 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 // for Windows Azure } }); 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); var user = {}; const query = 'SELECT Memberships.UserId, Email, Users.UserName ' + 'FROM Memberships INNER JOIN Users ' + 'ON Users.UserId = Memberships.UserId ' + 'WHERE Memberships.Email = @Username OR Users.UserName = @Username'; const getMembershipQuery = new Request(query, function(err, rowCount) { if (err) return callback(err); if (rowCount < 1) return callback(); callback(null, user); }); getMembershipQuery.addParameter('Username', TYPES.VarChar, email); getMembershipQuery.on('row', function(fields) { user = { user_id: fields.UserId.value, nickname: fields.UserName.value, email: fields.Email.value }; }); connection.execSql(getMembershipQuery); });}
Fournisseur d’appartenances ASP.NET (MVC4 – Appartenance simple)
Signaler un code incorrect
Copier
Demander à l'IA
function getByEmail(email, callback) { const sqlserver = require('[email protected]'); 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 // for Windows Azure } }); 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); var user = {}; const query = 'SELECT webpages_Membership.UserId, UserName, UserProfile.UserName from webpages_Membership ' + 'INNER JOIN UserProfile ON UserProfile.UserId = webpages_Membership.UserId ' + 'WHERE UserProfile.UserName = @Username'; const getMembershipQuery = new Request(query, function (err, rowCount) { if (err) return callback(err); if (rowCount < 1) return callback(); callback(null, user); }); getMembershipQuery.addParameter('Username', TYPES.VarChar, email); getMembershipQuery.on('row', function (fields) { user = { user_id: fields.UserId.value, nickname: fields.UserName.value, email: fields.UserName.value }; }); connection.execSql(getMembershipQuery); });}
async function getUserAsync(email, callback) { //should be updated as new versions of axios are made available (https://auth0-extensions.github.io/canirequire/#axios) const axios = require("[email protected]"); let response; try { response = await axios.post( //store API url in connection settings to better support SDLC environments configuration.baseAPIUrl + "/getUser", //user credentials passed as request body { email: email, }, { timeout: 10000, //end call gracefully if request times out so script can do necessary callback headers: { //securing api call with apiKey stored in connection settings. //quick and easy approach however using M2M tokens is more secure as // a secret must not be shared between client and API. "x-api-key": configuration.apiKey, }, } ); } catch (e) { if (e.response.status === 404) { //assuming api returns 404 when no user with specified email/username found return callback(null, null); } //callback for any other error type return callback(new Error(e.message)); } try { let user = response.data; //if using multiple custom db connections in your tenant prefix the //user_id with a connection specific key ex: "connName|" + user.user_id //this ensures unique user ids across all db connections return callback(null, { user_id: user.user_id, email: user.email, }); } catch (e) { return callback(new Error(e.message)); }}
function getByEmail(email, callback) { // Replace the {yourStormpathClientId} with your Stormpath ID var url = 'https://api.stormpath.com/v1/applications/{yourStormpathClientId}/accounts'; // Add your Stormpath API Client ID and Secret var apiCredentials = { user : '{yourStormpathApiId}', password: '{yourStormpathApiSecret}' }; // Make a GET request to find a user by email request({ url: url, method: 'GET', auth: apiCredentials, qs: { q: email }, json: true }, function (error, response, body) { if (response.statusCode !== 200) return callback(); var user = body.items[0]; if (!user) return callback(); var id = user.href.replace('https://api.stormpath.com/v1/accounts/', ''); return callback(null, { user_id: id, username: user.username, email: user.email, email_verified: true // Add any additional fields you would like to carry over from Stormpath }); });}