> ## Documentation Index
> Fetch the complete documentation index at: https://auth0.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Administration déléguée : Write Hook

> Découvrez comment utiliser le Write Hook avec l’extension d’administration déléguée.

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é.

<Warning>
  Auth0 ne prend en charge la création d’utilisateurs qu’avec les connexions aux bases de données.
</Warning>

## 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 <Tooltip href="/docs/fr-ca/glossary?term=management-api" tip="Management API
  Un produit permettant aux clients d’effectuer des tâches administratives." cta="Voir le glossaire">Management API</Tooltip>.

Pour plus d’informations sur **userFields**, veuillez consulter [Administration déléguée Paramètres Hook de requête](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook).

## 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.

```javascript lines theme={null}
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);
}
```

## En savoir plus

* [Administration déléguée : Hook d’accès](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-access-hook)
* [Administration déléguée : Hook de filtrage](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-filter-hook)
* [Administration déléguée : Hook de requête des adhésions](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-memberships-query-hook)
* [Administration déléguée : Requête de paramètres du hook](/docs/fr-ca/customize/extensions/delegated-administration-extension/delegated-administration-hooks/delegated-administration-settings-query-hook)
