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

# Vérification de l'e-mail (Email Verification)

> Guide pour implémenter la vérification de l'e-mail dans Laravel : préparation du modèle, définition des trois routes, middleware verified, personnalisation et événements.

## Introduction

La vérification de l'e-mail (Email Verification) est un mécanisme qui permet de confirmer qu'un utilisateur est bien propriétaire de l'adresse e-mail qu'il a fournie lors de son inscription. Laravel fournit nativement l'envoi de l'e-mail de confirmation et son traitement, ce qui vous permet de construire un flux d'authentification sécurisé avec un minimum de code.

<Info>
  Si vous utilisez un kit de démarrage, les écrans d'authentification et le flux de vérification de l'e-mail sont déjà intégrés. Si vous implémentez manuellement, définissez vous-même les modèles, routes et vues en suivant les étapes de cette page.
</Info>

## Préparation du modèle et de la base de données

### Implémenter MustVerifyEmail

Vérifiez que `App\Models\User` implémente `Illuminate\Contracts\Auth\MustVerifyEmail`.

```php theme={null}
<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    use Notifiable;
}
```

En ajoutant cette interface, un e-mail de confirmation est automatiquement envoyé aux nouveaux utilisateurs enregistrés. Si vous implémentez le processus d'inscription sans kit de démarrage, déclenchez l'événement `Registered` après une inscription réussie.

```php theme={null}
use Illuminate\Auth\Events\Registered;

event(new Registered($user));
```

### Vérifier la colonne email\_verified\_at

La table `users` doit contenir une colonne `email_verified_at`. Elle est généralement incluse dans la migration par défaut `0001_01_01_000000_create_users_table.php`.

## Routing (les trois routes)

Pour la vérification de l'e-mail, vous devez définir trois routes : `verification.notice`, `verification.verify` et `verification.send`.

<Steps>
  <Step title="Définir la route de notification (verification.notice)">
    Retourne un écran indiquant « Vérifiez vos e-mails » aux utilisateurs non vérifiés.

    ```php theme={null}
    Route::get('/email/verify', function () {
        return view('auth.verify-email');
    })->middleware('auth')->name('verification.notice');
    ```
  </Step>

  <Step title="Définir la route de gestion (verification.verify)">
    Lorsque l'utilisateur clique sur le lien reçu par e-mail, vérifie l'URL signée et termine l'authentification.

    ```php theme={null}
    use Illuminate\Foundation\Auth\EmailVerificationRequest;

    Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
        $request->fulfill();

        return redirect('/home');
    })->middleware(['auth', 'signed'])->name('verification.verify');
    ```
  </Step>

  <Step title="Définir la route de renvoi (verification.send)">
    Permet de renvoyer l'e-mail de confirmation si l'utilisateur l'a perdu.

    ```php theme={null}
    use Illuminate\Http\Request;

    Route::post('/email/verification-notification', function (Request $request) {
        $request->user()->sendEmailVerificationNotification();

        return back()->with('message', 'Verification link sent!');
    })->middleware(['auth', 'throttle:6,1'])->name('verification.send');
    ```
  </Step>
</Steps>

## Protection des routes

Pour n'autoriser que les utilisateurs authentifiés et vérifiés, utilisez le middleware `verified`. On le combine généralement avec `auth`.

```php theme={null}
Route::get('/profile', function () {
    // Accessible uniquement aux utilisateurs vérifiés
})->middleware(['auth', 'verified']);
```

Lorsqu'un utilisateur non vérifié tente d'y accéder, Laravel le redirige automatiquement vers `verification.notice`.

## Personnalisation

Pour personnaliser le contenu de l'e-mail de confirmation, configurez `VerifyEmail::toMailUsing` dans la méthode `boot` de `AppServiceProvider`.

```php theme={null}
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;

public function boot(): void
{
    VerifyEmail::toMailUsing(function (object $notifiable, string $url) {
        return (new MailMessage)
            ->subject('Verify Email Address')
            ->line('Click the button below to verify your email address.')
            ->action('Verify Email Address', $url);
    });
}
```

## Événements

Lorsque l'e-mail est vérifié, l'événement `Illuminate\Auth\Events\Verified` est déclenché. Les kits de démarrage le gèrent automatiquement, mais pour une implémentation manuelle, ajoutez le traitement de l'événement si nécessaire.


## Related topics

- [Guide de migration de laravel/ui vers Fortify](/fr/blog/ui-to-fortify.md)
- [Guide de mise à niveau de Laravel 12 vers 13](/fr/blog/upgrade-12-to-13.md)
- [Hachage (Hashing)](/fr/hashing.md)
- [Règles de validation personnalisées](/fr/advanced/custom-validation-rules.md)
- [Canal de notification - Laravel Bluesky](/fr/packages/laravel-bluesky/notification.md)
