MENU
Guida Definitiva all'Autenticazione in Laravel con Fortify

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:

  1. Apri vendor/laravel/framework/src/Illuminate/Foundation/Configuration/Middleware.php
  2. Cerca il metodo defaultAliases (circa riga 734), dove troverai il middleware auth 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:

  1. Cambia la rotta di redirect predefinita:
    'home' => '/',
    
  2. 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!

Leaving FrancescoMansi Your about to visit the following url Invalid URL

Loading...
Commenti


Commento creato.
Effettua il login per commentare!