Skip to main content

Introduzione

Il reset della password è un flusso di autenticazione fondamentale nelle applicazioni web. Con uno starter kit la funzionalità viene costruita automaticamente, ma nei progetti solo-API o con UI personalizzata serve l’implementazione manuale. Casi in cui serve l’implementazione manuale:
  • Backend solo-API (con frontend SPA o app mobile)
  • Se costruisci autonomamente l’UI di autenticazione senza starter kit
  • Se vuoi personalizzare completamente la notifica email o il design dell’URL di reset
Se hai creato il progetto con uno starter kit (laravel new) il reset password è già implementato. Questa pagina descrive come implementarlo senza starter kit.
Il flusso completo del reset password:

Configurazione

Configura il reset password nella chiave passwords di config/auth.php.
  • driver — modalità di salvataggio dati (database o cache)
  • expire — validità del token in minuti. Default 60 minuti
  • throttle — tempo di attesa (in secondi) prima di consentire un nuovo invio

Driver

Driver database

È il driver predefinito. Salva il token di reset nella tabella password_reset_tokens del database. Questa tabella è inclusa nelle migration predefinite di Laravel (0001_01_01_000000_create_users_table.php).

Driver cache

Nuova opzione disponibile da Laravel 11. Senza tabella nel database implementi il reset con una configurazione minimale.
Il driver cache salva il token nel cache store. Non serve la migration di password_reset_tokens. Il token è indicizzato usando l’email come chiave, quindi assicurati di non usare la stessa email come chiave di cache altrove nell’app.
Indicando un cache store dedicato nella chiave store eviti che php artisan cache:clear elimini i dati di reset. Il valore deve corrispondere al nome dello store configurato in config/cache.php.

Preparazione del modello

Per usare il reset password, il modello App\Models\User deve avere due trait.
  • Notifiable — necessario per inviare notifiche email
  • CanResetPassword — fornisce i metodi per generare e verificare i token di reset
Il modello User predefinito di Laravel include già questi trait. Nelle nuove installazioni non serve aggiungerli.

Implementazione delle route

Per il reset password servono 4 route. Mostra un form per inserire l’email.
Vista Blade corrispondente:
Riceve il form e invia l’email con Password::sendResetLink().
Password::sendResetLink() restituisce una stringa di stato.

3. Form di reset password

Mostra un form per inserire la nuova password quando l’utente clicca il link nell’email.
Vista Blade corrispondente:

4. Elaborazione del reset

Riceve il form e aggiorna la password con Password::reset().
Costanti di stato di Password::reset():

Scadenza del token

Con l’opzione expire di config/auth.php imposti la validità del token in minuti. Default 60.
Con il driver database, i token scaduti restano nel DB. Per pulirli periodicamente usa il comando Artisan:
Automatizzalo con lo scheduler.

Personalizzazione

Uso di una notifica personalizzata

Per personalizzare l’email di reset, sovrascrivi il metodo sendPasswordResetNotification sul modello User.
Nel metodo boot di AppServiceProvider, con ResetPassword::createUrlUsing() puoi cambiare l’URL del link di reset. Utile per reindirizzare a un frontend su un’altra origin (SPA).

Impostazione dei trusted host

L’URL del link di reset viene generato usando l’header Host della richiesta HTTP. Per prevenire richieste da host non validi, si consiglia di configurare i trusted host in bootstrap/app.php.
Quando implementi il reset password verifica sempre la configurazione dei trusted host. Configurazioni insufficienti espongono al rischio di host header injection.

Prossimi passi

Introduzione all'autenticazione

Impara il funzionamento generale del sistema di autenticazione di Laravel.

Notifiche

Approfondisci la personalizzazione delle notifiche email.
Ultima modifica il 13 luglio 2026