Administration déléguée : Write Hook

Le Write Hook, qui s’exécute à chaque création ou mise à jour d’un utilisateur, vous permet d’effectuer des actions telles que :

  • Changer le mot de passe de l’utilisateur

  • Changer l’adresse courriel de l’utilisateur

  • Mise à jour du profil utilisateur

Vous pouvez également utiliser le Write Hook pour définir automatiquement des valeurs par défaut pour les utilisateurs nouvellement créés. Par exemple, vous souhaiterez peut-être affecter automatiquement un utilisateur au même groupe, au même service ou au même fournisseur que ceux auxquels vous avez été affecté.

Contrat Hook

  • ctx : Objet de contexte.

    • request.originalUser: Valeurs de l’utilisateur actuel où le charge utile est le nouvel ensemble de champs. Disponible uniquement lorsque la méthode est mise à jour.

    • payload : Objet de charge utile

      • memberships : Tableau d’adhésions qui ont été sélectionnées dans l’interface utilisateur 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 de 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 de champs utilisateur (si spécifié dans la requête de paramètres)

    • method : Soit create ou update selon que cette fonction est appelée à la suite d’un appel de création ou de mise à jour.

  • callback(error, user) : Rappel auquel vous pouvez renvoyer une erreur et l’objet utilisateur qui doit être envoyé au Management API.

Pour plus d’informations sur userFields, veuillez consulter Administration déléguée Paramètres Hook de requête.

Exemples de cas d’utilisation

Kelly gère le service des finances. Lorsqu’elle crée des utilisateurs, ces utilisateurs doivent être désigné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.'));
  }

  // Get the department from the current user's metadata.
  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.'));
  }

  // If you're not in the IT department, you can only create users within your own department.
  // IT can create users in all departments.
  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') {
    // If updating, only set the fields we need to send
    Object.keys(newProfile).forEach(function(key) {
      if (newProfile[key] === ctx.request.originalUser[key]) delete newProfile[key];
    });
  }

  // This is the payload that will be sent to API v2. You have full control over how the user is created in API v2.
  return callback(null, newProfile);
}

Was this helpful?

/

En savoir plus