Passer au contenu principal
Le Write Hook, qui s’exécute chaque fois que vous créez ou mettez à jour un utilisateur, vous permet notamment de :
  • Modifier le mot de passe de l’utilisateur
  • Modifier l’adresse courriel de l’utilisateur
  • Mettre à jour le profil de l’utilisateur
Vous pouvez aussi utiliser le Write Hook pour définir automatiquement des valeurs par défaut pour les nouveaux utilisateurs. Par exemple, vous pourriez attribuer automatiquement à un utilisateur le même groupe, le même service ou le même fournisseur que celui qui vous a été attribué.
Auth0 prend uniquement en charge la création d’utilisateurs avec des connexions de base de données.

Contrat du hook

  • ctx : Objet de contexte.
    • request.originalUser : Valeurs de l’utilisateur actuel, où payload contient le nouvel ensemble de champs. Disponible uniquement lorsque la méthode est update.
    • payload : Objet payload
      • memberships : Tableau des appartenances sélectionnées dans l’interface lors de la création de l’utilisateur.
      • email : Adresse courriel de l’utilisateur.
      • password : Mot de passe de l’utilisateur.
      • connection : Nom de la connexion à la base de données.
      • app_metadata : Données incluses si un champ personnalisé en cours de modification est enregistré dans app_metadata.
      • user_metadata : Données incluses si un champ personnalisé en cours de modification est enregistré dans user_metadata.
    • userFields : Tableau des champs utilisateur (si précisé dans la requête de paramètres)
    • method : create ou update, selon que cet appel résulte d’une création ou d’une mise à jour.
  • callback(error, user) : Fonction de rappel à laquelle vous pouvez renvoyer une erreur ainsi que l’objet utilisateur à envoyer à la .
Pour en savoir plus sur userFields, consultez Delegated Administration: Settings Query Hook.

Exemple d’utilisation

Kelly gère le service des finances. Lorsqu’elle crée des utilisateurs, ceux-ci doivent être ajoutés comme membres du service des finances.
function(ctx, callback) {
  var newProfile = {
    email: ctx.payload.email,
    password: ctx.payload.password,
    connection: ctx.payload.connection,
    user_metadata: ctx.payload.user_metadata,
    app_metadata: {
      department: ctx.payload.memberships && ctx.payload.memberships[0],
      ...ctx.payload.app_metadata
    }
  };

  if (!ctx.payload.memberships || ctx.payload.memberships.length === 0) {
    return callback(new Error('The user must be created within a department.'));
  }

  // Obtenir le département à partir des métadonnées de l'utilisateur actuel.
  var currentDepartment = ctx.request.user.app_metadata && ctx.request.user.app_metadata.department;
  if (!currentDepartment || !currentDepartment.length) {
    return callback(new Error('The current user is not part of any department.'));
  }

  // Si vous n'êtes pas dans le département TI, vous ne pouvez créer des utilisateurs que dans votre propre département.
  // Le département TI peut créer des utilisateurs dans tous les départements.
  if (currentDepartment !== 'IT' && ctx.payload.memberships[0] !== currentDepartment) {
    return callback(new Error('You can only create users within your own department.'));
  }

  if (ctx.method === 'update') {
    // En cas de mise à jour, ne définir que les champs à envoyer
    Object.keys(newProfile).forEach(function(key) {
      if (newProfile[key] === ctx.request.originalUser[key]) delete newProfile[key];
    });
  }

  // Voici la charge utile qui sera envoyée à l'API v2. Vous avez un contrôle total sur la façon dont l'utilisateur est créé dans l'API v2.
  return callback(null, newProfile);
}

En savoir plus