Vai al contenuto principale

Introduzione

La verifica email (Email Verification) è il meccanismo che verifica se un utente possiede realmente l’indirizzo email registrato. Laravel fornisce di default l’invio dell’email di conferma e il processo di verifica, così puoi costruire un flusso di autenticazione sicuro con un’implementazione minima.
Se usi gli starter kit, le schermate di autenticazione e il flusso di verifica email sono già integrati. Se implementi tutto a mano, definisci autonomamente modello, route e viste seguendo le istruzioni di questa pagina.

Preparazione di modello e database

Implementare MustVerifyEmail

Assicurati che App\Models\User implementi 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;
}
Aggiungendo questa interfaccia, l’email di conferma viene inviata automaticamente ai nuovi utenti registrati. Se implementi la registrazione senza usare gli starter kit, emetti l’evento Registered dopo che la registrazione ha avuto successo.
use Illuminate\Auth\Events\Registered;

event(new Registered($user));

Verifica della colonna email_verified_at

La tabella users deve avere la colonna email_verified_at. Di norma è già inclusa nella migration di default 0001_01_01_000000_create_users_table.php.

Routing (3 route)

Per la verifica email definisci le 3 route verification.notice, verification.verify e verification.send.
1

Definisci la route di notifica di verifica (verification.notice)

Restituisce la schermata che mostra “controlla la tua email” agli utenti non verificati.
Route::get('/email/verify', function () {
    return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');
2

Definisci la route di gestione della verifica (verification.verify)

Quando l’utente clicca sul link nell’email, verifica l’URL firmato e completa la verifica.
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

Definisci la route di reinvio (verification.send)

Reinvia l’email di conferma se l’utente l’ha smarrita.
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');

Protezione delle route

Per consentire l’accesso solo agli utenti verificati usa il middleware verified. Di solito lo combini con auth.
Route::get('/profile', function () {
    // Accessibile solo agli utenti verificati
})->middleware(['auth', 'verified']);
Quando un utente non verificato accede, Laravel lo reindirizza automaticamente a verification.notice.

Personalizzazione

Per personalizzare il corpo dell’email di conferma, configura VerifyEmail::toMailUsing nel metodo boot di 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);
    });
}

Eventi

Alla verifica email viene emesso l’evento Illuminate\Auth\Events\Verified. Con gli starter kit è gestito automaticamente; nell’implementazione manuale, aggiungi la gestione dell’evento se necessario.
Ultima modifica il 13 luglio 2026