L’autenticazione rappresenta il cuore pulsante della sicurezza in qualsiasi applicazione web. È il primo baluardo difensivo che protegge i dati sensibili e le aree riservate della tua piattaforma.
Ma cosa significa realmente “autenticazione” nel contesto dello sviluppo web?
In parole semplici, l’autenticazione è il processo che verifica l’identità di un utente.
Immagina una porta con una serratura: solo chi possiede la chiave giusta può entrare.
Questo meccanismo non solo garantisce la sicurezza, ma è fondamentale per offrire un’esperienza utente personalizzata e funzionalità come:
- Accesso a un profilo riservato
- Differenziare gli altri utenti registrati
- Modifica dei dati personali o della password
- Procedura di reset della password
- Livelli di sicurezza come Verifica email o conferma Password
In questa guida Guida Definitiva all’Autenticazione, esploreremo come implementare un robusto sistema di autenticazione utilizzando Laravel 11 e Fortify, una soluzione potente e flessibile che semplificherà notevolmente il tuo lavoro di sviluppo.
1. Prerequisiti: Preparare l’Ambiente di Sviluppo
Prima di immergerci nel codice, assicuriamoci di avere tutto il necessario sulla nostra macchina:
- PHP >= 8.3
- Node >= 16
- Laravel 11
- SQLite o MySQL (per il database)
2. Installazione e Configurazione Iniziale di Laravel
Iniziamo creando un nuovo progetto Laravel:
laravel new autenticazione-laravel
cd autenticazione-laravel
Modifica il file resources/views/welcome.blade.php
, mantenendo solo uno starter template essenziale.
Questo ci permetterà di concentrarci sugli elementi cruciali dell’autenticazione:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Laravel Fortify</title>
</head>
<body>
<h1>Area Riservata</h1>
<hr>
Benvenuto
</body>
</html>
La pagina appena creata sarà la nostra area riservata a cui accedere solo una volta autenticato. Ma come facciamo a proteggerla?
Laravel offre già un potente middleware di controllo. Diamo un’occhiata a come funziona:
- Apri
vendor/laravel/framework/src/Illuminate/Foundation/Configuration/Middleware.php
- Cerca il metodo
defaultAliases
(circa riga 734), dove troverai il middlewareauth
predefinito
Il middleware Auth andrà semplicemente e controllare la sessione e a definire se l’utente è autenticato o no.
Proviamo ad applicare il middleware auth
a una rotta nel file routes/web.php
:
Route::middleware(['auth'])->group(function () {
Route::get('/', function () {
return view('welcome');
})->name('welcome');
});
Se provi ad accedere a 127.0.0.1:8000
, incontrerai un errore: Route [login] not defined
.
Dobbiamo implementare una pagina di login.
3. Implementazione del Login con Laravel Fortify
Finalmente possiamo installare Fortify. Laravel Fortify è un pacchetto potente che semplifica l’implementazione di tutta la logica di autenticazione. Installiamolo:
composer require laravel/fortify
php artisan fortify:install
php artisan migrate
Modifica il file config/fortify.php
appena aggiunto in questi 2 punti:
- Cambia la rotta di redirect predefinita:
'home' => '/',
- Disattiva temporaneamente le funzionalità extra:
'features' => [ // Features::registration(), // ... altre features commentate ],
Ancora, vai in app/Providers/FortifyServiceProvider.php
e aggiungi nel metodo boot
questo snippet di codice:
public function boot(): void
{
Fortify::loginView(function () {
return view('auth.login');
});
}
Stiamo indicando a Fortify la posizione della View da richiamare per visualizzare il form di login.
View che non abbiamo, quindi procediamo subito con la creazione resources/views/auth/login.blade.php
:
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<form action="{{ route('login') }}" method="POST">
@csrf
<div>
<label for="email">Email</label>
<input type="email" name="email" required>
</div>
<div>
<label for="password">Password</label>
<input type="password" name="password" required>
</div>
<button type="submit">Accedi</button>
<a href="{{ route('register') }}">Non sei registrato?</a>
</form>
4. Implementazione della Registrazione
Login aggiunto, dobbiamo adesso predisporre il form per permettere la registrazione degli utenti.
Andiamo come prima istanza ad abilitare la funzionalità in config/fortify.php
:
'features' => [
Features::registration(),
// ... altre features
],
Procediamo con l’aggiunta del metodo registerView
in FortifyServiceProvider.php
:
Fortify::registerView(function () {
return view('auth.register');
});
E andiamo a creare il file resources/views/auth/register.blade.php
:
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<form action="{{ route('register') }}" method="POST">
@csrf
<div>
<label for="name">Nome</label>
<input type="text" name="name" required>
</div>
<div>
<label for="email">Email</label>
<input type="email" name="email" required>
</div>
<div>
<label for="password">Password</label>
<input type="password" name="password" required>
</div>
<div>
<label for="password_confirmation">Conferma Password</label>
<input type="password" name="password_confirmation" required>
</div>
<button type="submit">Registrati</button>
<a href="{{ route('login') }}">Già iscritto?</a>
</form>
5. Implementazione del Logout
Per concludere il tutto, modifica la vista welcome.blade.php
che puoi trovare qui resources/views/welcome.blade.php
aggiungendo un form che inneschi il Logout (se necessario):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Laravel Fortify</title>
</head>
<body>
<h1>Area Riservata</h1>
<hr>
Benvenuto, {{ Auth::user()->name }}
<hr>
<form action="{{ route('logout') }}" method="post">
@csrf
<button type="submit">Logout</button>
</form>
<hr>
</body>
</html>
6. Gestione delle Sessioni con Auth
Avrai sicuramente notato la echo {{ Auth::user()->name }}
bene, tramite la classe Auth (nativa di Laravel Vanilla, non è una classe di Fortify) è possibile accedere a tutti gli attributi e metodi dell’utente autenticato.
...
{{ Auth::user()->name }}
{{ Auth::user()->email }}
{{ Auth::user()->getRole() }}
...
7. Conclusione: Sicurezza e Usabilità per la Tua Applicazione Web
Implementare un sistema di autenticazione robusto è fondamentale per qualsiasi applicazione web moderna. Con Laravel 11 e Fortify, abbiamo creato un sistema sicuro, flessibile e facile da personalizzare.
Ricorda, l’autenticazione è solo il primo passo verso una sicurezza completa.
Seguendo il mio canale Youtube potrai implementare anche:
- Autenticazione a due fattori
- Aggiornamento Profilo
- Aggiornamento Password
- Reset Password
- Password Dimenticata
- Verifica Email e Conferma Password
Seguendo questa guida, hai posto le basi per un’applicazione web sicura e user-friendly.
Continua a esplorare le funzionalità avanzate di Laravel e Fortify per portare il tuo progetto al livello successivo!