
# Lien magique et OTP par e-mail

Deux façons de connecter un utilisateur sans mot de passe, toutes deux prouvant le contrôle d'une boîte de réception : un **lien** qu'il clique, ou un **code** qu'il saisit. Ni l'une ni l'autre ne stocke de mot de passe, donc aucune n'a de mot de passe à fuiter ou à réinitialiser.

Elles s'activent par des mécanismes différents — le lien est une entrée de stratégie, le code non. Cette asymétrie est la seule chose à ne pas manquer sur cette page.

## Lien magique

Une entrée de stratégie. L'utilisateur soumet son e-mail, reçoit un lien à usage unique, et se connecte en le suivant.

```yaml
auth:
  strategies:
    - type: magicLink
      expirationMinutes: 30
```

| Propriété           | Description                                                        |
| ------------------- | ------------------------------------------------------------------ |
| `expirationMinutes` | Durée de vie du lien en minutes (entier positif). Par défaut `15`. |

Les 15 minutes par défaut supposent que l'utilisateur attend le courrier. Allongez-les si votre public consulte ses e-mails sur un téléphone, plus tard ; raccourcissez-les si le lien ouvre l'accès à quelque chose de sensible, car un lien vivant dans une boîte de réception est un identifiant vivant.

Le corps du message est rendu à partir du [modèle d'e-mail](/fr/docs/auth-email-templates) `magicLink` lorsque vous en fournissez un, avec `$url` substitué par le lien.

## Activer l'OTP par e-mail

L'OTP par e-mail délivre un code numérique à usage unique plutôt qu'un lien — préférable sur un appareil où suivre un lien romprait le parcours, et plus facile à dicter au téléphone.

**Il n'existe pas d'entrée de stratégie `type: emailOtp`.** Le flux s'active lorsque vous définissez le modèle d'e-mail `emailOtp` ; c'est sa présence qui monte le plugin.

```yaml
auth:
  strategies:
    - type: emailAndPassword
  emailTemplates:
    emailOtp:
      subject: Your sign-in code
      text: 'Your verification code is $code. It expires shortly.'
```

`$code` est remplacé par le code à usage unique généré. Notez que le tableau de stratégies ci-dessus ne déclare que `emailAndPassword` — l'OTP par e-mail accompagne les stratégies que vous avez déclarées, il ne les remplace pas.

:::callout
**Ajouter `type: emailOtp` à `strategies` est une erreur de validation.** L'union n'accepte que `emailAndPassword`, `magicLink` et `oauth` : une configuration qui devine une stratégie OTP échoue à `sovrium validate` plutôt que de démarrer sans le flux.
:::

## Les deux nécessitent SMTP

Un flux sans mot de passe qui ne peut pas envoyer de courrier ne peut connecter personne. Lorsque SMTP n'est pas défini, l'application démarre avec l'e-mail désactivé et consigne un avertissement — les tentatives de connexion échouent alors silencieusement, l'utilisateur attendant un message jamais envoyé.

Configurez SMTP avant de livrer l'un ou l'autre flux, et préférez conserver `emailAndPassword` déclaré à leurs côtés pendant ce temps : cela vous laisse une voie d'entrée fonctionnelle si la délivrance du courrier casse. Voir [Variables d'environnement](/fr/docs/env-vars) pour les réglages SMTP.

## Pages connexes

- [Présentation des stratégies](/fr/docs/auth-strategies) — le tableau `strategies` et comment choisir.
- [Modèles d'e-mail](/fr/docs/auth-email-templates) — les corps `magicLink` et `emailOtp` et leurs variables.
- [E-mail et mot de passe](/fr/docs/auth-email-password) — la stratégie par identifiants qui les accompagne.
- [Variables d'environnement](/fr/docs/env-vars) — configuration SMTP et `BASE_URL`.
- [Sessions](/fr/docs/auth-sessions) — la session qu'émet un lien ou un code réussi.
