Passer au contenu principal

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

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

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

Définir la route de notification (verification.notice)

Retourne un écran indiquant « Vérifiez vos e-mails » aux utilisateurs non vérifiés.
Route::get('/email/verify', function () {
    return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');
2

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.
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');
3

Définir la route de renvoi (verification.send)

Permet de renvoyer l’e-mail de confirmation si l’utilisateur l’a perdu.
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');

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.
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.
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.
Dernière modification le 13 juillet 2026