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

# Pre User Registration

> Découvrez les Actions Pre User Registration, qui s’exécutent avant qu’un utilisateur soit ajouté à une connexion Database ou Passwordless. Elles permettent d’ajouter des métadonnées au profil utilisateur avant sa création ou de rejeter un enregistrement.

Le déclencheur `pre-user-registration` s’exécute lorsqu’un utilisateur tente de s’enregistrer au moyen d’une connexion Database ou <Tooltip tip="Passwordless : forme d’authentification qui ne repose pas sur un mot de passe comme premier facteur." cta="Voir le glossaire" href="/docs/fr-ca/glossary?term=Passwordless">Passwordless</Tooltip>, avant la création de l’utilisateur. Utilisez ce déclencheur pour ajouter des métadonnées au profil utilisateur avant sa création ou pour rejeter un enregistrement à l’aide d’une logique personnalisée.

<Frame>
  <img src="https://mintcdn.com/translations/Dcx0M11uuptU53TX/docs/images/cdy7uua7fh8z/2KtUcZhaBcT12GxjhBJZFG/9633b4454ac1c06c0deed6c97e70fe7d/pre-user-registration-flow.png?fit=max&auto=format&n=Dcx0M11uuptU53TX&q=85&s=f086c5deb8fb184c3097b6a97046a5da" alt="Diagramme illustrant le flux Pre User Registration des Actions." width="849" height="286" data-path="docs/images/cdy7uua7fh8z/2KtUcZhaBcT12GxjhBJZFG/9633b4454ac1c06c0deed6c97e70fe7d/pre-user-registration-flow.png" />
</Frame>

Les Actions de ce flux sont bloquantes (synchrones) : elles s’exécutent dans le cadre du processus du déclencheur et empêchent le reste du pipeline Auth0 de s’exécuter jusqu’à ce que l’Action soit terminée.

<Note>
  Vous ne pouvez actuellement pas utiliser les Actions `pre-user-registration` pour ajouter des métadonnées aux utilisateurs passwordless.
</Note>

<div id="references">
  ## Références
</div>

* [Objet Event](/docs/fr-ca/customize/actions/reference/pre-user-registration/pre-user-registration-event-object) : fournit des informations contextuelles sur la demande d’enregistrement d’un nouvel utilisateur.
* [Objet API](/docs/fr-ca/customize/actions/reference/pre-user-registration/pre-user-registration-api-object) : fournit des méthodes permettant de modifier le comportement du flux.

<div id="common-use-cases">
  ## Cas d’utilisation courants
</div>

<div id="deny-registration-by-location">
  ### Rejeter l’enregistrement selon l’emplacement
</div>

Une Action pre-user-registration peut être utilisée pour empêcher un utilisateur de s’inscrire :

```javascript lines theme={null}
/**
 * @param {Event} event - Détails sur le contexte et l'utilisateur qui tente de s'inscrire.
 * @param {PreUserRegistrationAPI} api - Interface dont les méthodes permettent de modifier le comportement de l'inscription.
 */
exports.onExecutePreUserRegistration = async (event, api) => {
  if (event.request.geoip.continentCode === "NA") {

    // localiser le message d'erreur 
    const LOCALIZED_MESSAGES = {
      en: 'You are not allowed to register.',
      es: 'No tienes permitido registrarte.'
    };

    const userMessage = LOCALIZED_MESSAGES[event.request.language] || LOCALIZED_MESSAGES['en'];
    api.access.deny('no_signups_from_north_america', userMessage);
  }
};
```

<div id="set-metadata-in-the-user-profile">
  ### Définir des métadonnées dans le profil utilisateur
</div>

Une Action pre-user-registration permet d’ajouter des métadonnées au profil utilisateur avant sa création :

```javascript lines theme={null}
/**
 * @param {Event} event - Renseignements sur le contexte et l’utilisateur qui tente de s’inscrire.
 * @param {PreUserRegistrationAPI} api - Interface dont les méthodes permettent de modifier le comportement de l’inscription.
 */
exports.onExecutePreUserRegistration = async (event, api) => {
  api.user.setUserMetadata("screen_name", "username");
};
```

<div id="store-a-user-id-from-another-system-in-the-user-profile">
  ### Stocker l’ID utilisateur d’un autre système dans le profil utilisateur
</div>

Une Action pre-user-registration peut servir à stocker l’ID utilisateur d’un autre système dans le profil utilisateur :

```javascript lines expandable theme={null}
const axios = require('axios');

const REQUEST_TIMEOUT = 2000; // Exemple de timeout

/**
 * @param {Event} event - Détails sur le contexte et l'utilisateur qui tente de s'inscrire.
 * @param {PreUserRegistrationAPI} api - Interface dont les méthodes permettent de modifier le comportement de l’inscription.
 */
exports.onExecutePreUserRegistration = async (event, api) => {
  try {
    // Définir un secret USER_SERVICE_URL = 'https://yourservice.com'
    const remoteUser = await axios.get(event.secrets.USER_SERVICE_URL, {
      timeout: REQUEST_TIMEOUT,
      params: {
        email: event.user.email 
      }
    });

    if (remoteUser) {
      api.user.setAppMetadata('my-api-user-id', remoteUser.id); 
    }
  } catch (err) {
    api.validation.error('custom_error', 'Custom Error');
  }
};
```

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Pour utiliser une bibliothèque `npm` telle que `axios`, vous devez l’ajouter comme dépendance à l’Action. Pour en savoir plus, consultez la section "Ajouter une dépendance" de [Write Your First Action](/docs/fr-ca/customize/actions/write-your-first-action).
</Callout>

<div id="deny-access-to-specific-ja3ja4-fingerprints">
  ### Rejeter l’accès en fonction d’empreintes JA3/JA4 précises
</div>

L’objet `event.security_context` contient les valeurs d’empreinte JA3/JA4 associées à la transaction en cours :

```javascript lines theme={null}
/**
 * @param {Event} event - Détails sur le contexte et l’utilisateur qui tente de s’inscrire.
 * @param {PreUserRegistrationAPI} api - Interface dont les méthodes peuvent être utilisées pour modifier le comportement de l’inscription.
 */
exports.onExecutePreUserRegistration = async (event, api) => {
  const clientJa4 = event?.security_context?.ja4;
  console.log('[ACTION]', {clientJa4});
  const badFingerprints = ['t13d1517h2_8daaf6152771_b6f405a00624','t13d1516h2_8daaf6152771_d8a2da3f94cd'];
  if (clientJa4 && badFingerprints.includes(clientJa4)){
    api.access.deny('suspicious_tls_fingerprint', 'Your TLS fingerprint has been flagged as suspicious');
  }
};
```
