Prologo
Primi Passi
Architettura
Le Basi
- Routing
- Middleware
- Protezione da CSRF
- Controller
- Richieste
- Risposte
- Views
- Blade
- Vite
- URL
- Sessioni
- Validazione
- Errori
- Logging
Approfondimenti
- Artisan
- Broadcasting
- Cache
- Collezioni
- Concorrenza
- Contesto
- Contratti
- Eventi
- File System
- Helpers
- Client HTTP
- Localizzazione
- Notifiche
- Sviluppo di Package
- Processi
- Code
- Rate-limiting
- Stringhe
- Scheduling di Task
Sicurezza
Database
Eloquent ORM
Testing
Package
Verifica Utenti
Introduzione
Molte applicazioni web richiedono agli utenti di verificare il loro indirizzo email prima di utilizzare l’applicazione. Invece di dover implementare manualmente questa funzionalità per ogni applicazione che crei, Laravel offre servizi integrati comodi per l’invio e la verifica delle richieste di verifica email.
Vuoi iniziare rapidamente? Installa uno dei starter kits per applicazioni Laravel in una nuova applicazione Laravel. Gli starter kits si occuperanno di configurare l’intero sistema di autenticazione, inclusa la verifica email.
Preparazione del Modello
Prima di iniziare, verifica che il tuo modello App\Models\User
implementi il contratto 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;
// ...
}
Una volta aggiunta questa interfaccia al tuo modello, agli utenti appena registrati verrà inviata automaticamente un’email con un link di verifica. Questo avviene senza problemi perché Laravel registra automaticamente il Illuminate\Auth\Listeners\SendEmailVerificationNotification
listener per l’evento Illuminate\Auth\Events\Registered
.
Se stai implementando manualmente la registrazione nella tua applicazione invece di utilizzare un kit iniziale, dovresti assicurarti di inviare l’evento Illuminate\Auth\Events\Registered
dopo che la registrazione di un utente è riuscita:
use Illuminate\Auth\Events\Registered;
event(new Registered($user));
Preparazione del Database
Successivamente, la tua tabella users
deve contenere una colonna email_verified_at
per memorizzare la data e l’ora in cui l’indirizzo email dell’utente è stato verificato. Di solito, questo è incluso nella migrazione del database predefinita di Laravel 0001_01_01_000000_create_users_table.php
.
Routing
Per implementare correttamente la verifica dell’email, sarà necessario definire tre rotte. Prima di tutto, serve una rotta per mostrare un avviso all’utente, indicando di cliccare sul link di verifica presente nell’email inviata da Laravel dopo la registrazione.
In secondo luogo, serve una rotta per gestire le richieste generate quando l’utente clicca sul link di verifica nell’email.
Infine, serve una rotta per inviare nuovamente un link di verifica se l’utente perde accidentalmente il primo link.
Avviso di Verifica Email
Come già menzionato, devi definire una route che restituisca una view che istruisce l’utente a cliccare sul link di verifica email inviato da Laravel dopo la registrazione. Questa view verrà mostrata agli utenti quando tentano di accedere ad altre parti dell’applicazione senza aver prima verificato il loro indirizzo email. Ricorda, il link viene inviato automaticamente via email all’utente se il tuo modello App\Models\User
implementa l’interfaccia MustVerifyEmail
:
Route::get('/email/verify', function () {
return view('auth.verify-email');
})->middleware('auth')->name('verification.notice');
La route che restituisce l’avviso di verifica email dovrebbe essere chiamata verification.notice
. È importante usare esattamente questo nome per la route perché il middleware verified
incluso con Laravel reindirizzerà automaticamente a questa route se l’utente non ha verificato il suo indirizzo email.
Quando implementi manualmente la verifica email, devi definire tu stesso il contenuto della view per l’avviso di verifica. Se desideri uno scaffolding che includa tutte le view necessarie per l’autenticazione e la verifica, dai un’occhiata ai Laravel application starter kits.
Il Gestore della Verifica Email
Successivamente, dobbiamo definire una route che gestirà le richieste generate quando l’utente clicca sul link di verifica email che gli è stato inviato. Questa route dovrebbe chiamarsi verification.verify
ed essere assegnata ai middleware auth
e signed
:
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');
Prima di procedere, diamo un’occhiata più da vicino a questa route. Innanzitutto, noterai che stiamo usando il tipo di richiesta EmailVerificationRequest
invece della tipica istanza Illuminate\Http\Request
. EmailVerificationRequest
è una form request inclusa in Laravel. Questa richiesta si occupa automaticamente di validare i parametri id
e hash
.
Successivamente, possiamo chiamare direttamente il metodo fulfill
sulla richiesta. Questo metodo esegue markEmailAsVerified
sull’utente autenticato e invia l’evento Illuminate\Auth\Events\Verified
. Il metodo markEmailAsVerified
è disponibile nel modello predefinito App\Models\User
tramite la classe base Illuminate\Foundation\Auth\User
. Una volta verificato l’indirizzo email dell’utente, puoi reindirizzarlo dove preferisci.
Reinvio dell’email di verifica
A volte un utente può smarrire o cancellare accidentalmente l’email di verifica dell’indirizzo. Per questo, potresti definire una route che permetta all’utente di richiedere il reinvio dell’email di verifica. Puoi quindi fare una richiesta a questa route inserendo un semplice pulsante di invio modulo nella tua vista di notifica di verifica:
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');
Proteggere le Rotte
Il middleware delle rotte può essere utilizzato per consentire l’accesso a una rotta solo agli utenti verificati. Laravel include un alias verified
per middleware alias, che è un alias per la classe middleware Illuminate\Auth\Middleware\EnsureEmailIsVerified
. Poiché questo alias è già registrato automaticamente da Laravel, tutto ciò che devi fare è aggiungere il middleware verified
alla definizione di una rotta. Di solito, questo middleware viene associato al middleware auth
:
Route::get('/profile', function () {
// Solo gli utenti verificati possono accedere a questa rotta...
})->middleware(['auth', 'verified']);
Se un utente non verificato tenta di accedere a una rotta a cui è stato assegnato questo middleware, verrà automaticamente reindirizzato alla verification.notice
named route.
Personalizzazione
Personalizzazione dell’Email di Verifica
Sebbene la notifica di verifica email predefinita soddisfi i requisiti della maggior parte delle applicazioni, Laravel ti permette di personalizzare come viene costruito il messaggio email di verifica.
Per iniziare, passa una closure al metodo toMailUsing
fornito dalla notifica Illuminate\Auth\Notifications\VerifyEmail
. La closure riceverà l’istanza del modello notificabile che sta ricevendo la notifica e l’URL firmato di verifica email che l’utente deve visitare per verificare il proprio indirizzo email. La closure dovrebbe restituire un’istanza di Illuminate\Notifications\Messages\MailMessage
. In genere, dovresti chiamare il metodo toMailUsing
dal metodo boot
della classe AppServiceProvider
della tua applicazione:
use Illuminate\Auth\Notifications\VerifyEmail;
use Illuminate\Notifications\Messages\MailMessage;
/**
* Bootstrap any application services.
*/
public function boot(): void
{
// ...
VerifyEmail::toMailUsing(function (object $notifiable, string $url) {
return (new MailMessage)
->subject('Verifica Indirizzo Email')
->line('Clicca sul pulsante qui sotto per verificare il tuo indirizzo email.')
->action('Verifica Indirizzo Email', $url);
});
}
Per saperne di più sulle notifiche via email, consulta la documentazione sulle notifiche email.
Eventi
Quando usi i starter kit per applicazioni Laravel, Laravel emette un evento Illuminate\Auth\Events\Verified
durante il processo di verifica dell’email. Se gestisci manualmente la verifica dell’email nella tua applicazione, potresti voler emettere manualmente questi eventi dopo aver completato la verifica.