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 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).
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.
Per usare il reset password, il modello App\Models\User deve avere due trait.
<?phpnamespace App\Models;use Illuminate\Auth\Passwords\CanResetPassword;use Illuminate\Foundation\Auth\User as Authenticatable;use Illuminate\Notifications\Notifiable;class User extends Authenticatable{ use Notifiable, CanResetPassword; // ...}
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.
Per personalizzare l’email di reset, sovrascrivi il metodo sendPasswordResetNotification sul modello User.
use App\Notifications\ResetPasswordNotification;class User extends Authenticatable{ use Notifiable, CanResetPassword; /** * Invia la notifica di reset password */ public function sendPasswordResetNotification($token): void { $url = 'https://example.com/reset-password?token='.$token; $this->notify(new ResetPasswordNotification($url)); }}
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).
use App\Models\User;use Illuminate\Auth\Notifications\ResetPassword;public function boot(): void{ ResetPassword::createUrlUsing(function (User $user, string $token) { return 'https://example.com/reset-password?token='.$token; });}
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.