Fortify

Introduzione

Laravel Fortify è un’implementazione backend di autenticazione per Laravel, indipendente dal frontend. Fortify registra le rotte e i controller necessari per implementare tutte le funzionalità di autenticazione di Laravel, inclusi login, registrazione, reset della password, verifica email e altro. Dopo aver installato Fortify, puoi eseguire il comando Artisan route:list per vedere le rotte che Fortify ha registrato.

Poiché Fortify non fornisce un’interfaccia utente propria, è pensato per essere abbinato alla tua interfaccia utente che effettua richieste alle rotte che registra. Discuteremo esattamente come fare le richieste a queste rotte nel resto di questa documentazione.

Ricorda, Fortify è un pacchetto pensato per darti un vantaggio nell’implementazione delle funzionalità di autenticazione di Laravel. Non sei obbligato a usarlo. Sei sempre libero di interagire manualmente con i servizi di autenticazione di Laravel seguendo la documentazione disponibile in autenticazione, reset della password e verifica email.

Cosa è Fortify?

Come già accennato, Laravel Fortify è un’implementazione backend di autenticazione indipendente dal frontend per Laravel. Fortify registra le rotte e i controller necessari per implementare tutte le funzionalità di autenticazione di Laravel, inclusi login, registrazione, reset della password, verifica dell’email e altro ancora.

Non è obbligatorio utilizzare Fortify per utilizzare le funzionalità di autenticazione di Laravel. Sei sempre libero di interagire manualmente con i servizi di autenticazione di Laravel seguendo la documentazione disponibile nella documentazione di autenticazione, reset della password e verifica dell’email.

Se sei nuovo a Laravel, potresti voler esplorare il kit di avvio per applicazioni Laravel Breeze prima di tentare di utilizzare Laravel Fortify. Laravel Breeze fornisce una struttura di autenticazione per la tua applicazione che include un’interfaccia utente costruita con Tailwind CSS. Diversamente da Fortify, Breeze pubblica le sue rotte e i suoi controller direttamente nella tua applicazione. Questo ti permette di studiare e prendere confidenza con le funzionalità di autenticazione di Laravel prima di permettere a Laravel Fortify di implementare queste funzionalità per te.

Laravel Fortify essenzialmente prende le rotte e i controller di Laravel Breeze e li offre come un pacchetto che non include un’interfaccia utente. Questo ti permette di creare rapidamente la struttura backend per il livello di autenticazione della tua applicazione senza essere vincolato a opinioni particolari sul frontend.

Quando dovrei usare Fortify?

Potresti chiederti quando è opportuno usare Laravel Fortify. Innanzitutto, se stai utilizzando uno dei starter kit per applicazioni di Laravel, non hai bisogno di installare Laravel Fortify poiché tutti gli starter kit di Laravel offrono già un’implementazione completa dell’autenticazione.

Se non stai usando uno starter kit e la tua applicazione necessita di funzionalità di autenticazione, hai due opzioni: implementare manualmente le funzionalità di autenticazione della tua applicazione oppure usare Laravel Fortify per fornire l’implementazione backend di queste funzionalità.

Se scegli di installare Fortify, la tua interfaccia utente effettuerà richieste alle route di autenticazione di Fortify dettagliate in questa documentazione per autenticare e registrare gli utenti.

Se preferisci interagire manualmente con i servizi di autenticazione di Laravel invece di usare Fortify, puoi farlo seguendo la documentazione disponibile nella sezione authentication, password reset e email verification.

Laravel Fortify e Laravel Sanctum

Alcuni sviluppatori si confondono riguardo alla differenza tra Laravel Sanctum e Laravel Fortify. Poiché i due pacchetti risolvono problemi diversi ma correlati, Laravel Fortify e Laravel Sanctum non sono pacchetti mutualmente esclusivi o in competizione.

Laravel Sanctum si occupa solo della gestione dei token API e dell’autenticazione degli utenti esistenti usando cookie di sessione o token. Sanctum non fornisce alcuna route per gestire la registrazione degli utenti, il reset delle password, ecc.

Se stai cercando di costruire manualmente il livello di autenticazione per un’applicazione che offre un’API o funge da backend per una single-page application, è del tutto possibile che utilizzi sia Laravel Fortify (per la registrazione degli utenti, il reset delle password, ecc.) sia Laravel Sanctum (gestione dei token API, autenticazione delle sessioni).

Installazione

Per iniziare, installa Fortify utilizzando il gestore di pacchetti Composer:

composer require laravel/fortify

Successivamente, pubblica le risorse di Fortify usando il comando Artisan fortify:install:

php artisan fortify:install

Questo comando pubblicherà le azioni di Fortify nella directory app/Actions, che verrà creata se non esiste. Inoltre, verranno pubblicati il FortifyServiceProvider, il file di configurazione e tutte le migrazioni del database necessarie.

Successivamente, esegui la migrazione del tuo database:

php artisan migrate

Funzionalità di Fortify

Il file di configurazione fortify contiene un array di configurazione features. Questo array definisce quali route di backend / funzionalità Fortify esporrà di default. Se non stai utilizzando Fortify in combinazione con Laravel Jetstream, ti consigliamo di abilitare solo le seguenti funzionalità, che sono le funzionalità di autenticazione di base fornite dalla maggior parte delle applicazioni Laravel:

'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
],

Disabilitare le viste

Per impostazione predefinita, Fortify definisce delle rotte che restituiscono viste, come la schermata di login o di registrazione. Tuttavia, se stai creando un’applicazione a pagina singola gestita da JavaScript, potresti non aver bisogno di queste rotte. Per questo motivo, puoi disabilitarle completamente impostando il valore di configurazione views nel file di configurazione config/fortify.php della tua applicazione su false:

'views' => false,

Disabilitare le viste e il reset della password

Se scegli di disabilitare le viste di Fortify e implementerai le funzionalità di reset della password per la tua applicazione, dovresti comunque definire una route chiamata password.reset che si occupa di mostrare la vista "reset password" della tua applicazione. Questo è necessario perché la notifica Illuminate\Auth\Notifications\ResetPassword di Laravel genererà l’URL per il reset della password tramite la route denominata password.reset.

Autenticazione

Per cominciare, dobbiamo indicare a Fortify come restituire la nostra vista "login". Ricorda, Fortify è una libreria di autenticazione headless. Se preferisci un’implementazione frontend delle funzionalità di autenticazione di Laravel già pronta, dovresti usare un kit di avvio dell’applicazione.

Tutta la logica di rendering della vista di autenticazione può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Di solito, dovresti chiamare questo metodo dal metodo boot della classe App\Providers\FortifyServiceProvider della tua applicazione. Fortify si occuperà di definire la rotta /login che restituisce questa vista:

    use Laravel\Fortify\Fortify;

    /**
     * Bootstrap any application services.
     */
    public function boot(): void
    {
        Fortify::loginView(function () {
            return view('auth.login');
        });

        // ...
    }

Il tuo template di login dovrebbe includere un form che invia una richiesta POST a /login. L’endpoint /login si aspetta una stringa email / username e una password. Il nome del campo email / username deve corrispondere al valore username nel file di configurazione config/fortify.php. Inoltre, può essere fornito un campo booleano remember per indicare che l’utente desidera utilizzare la funzionalità "ricordami" offerta da Laravel.

Se il tentativo di login ha successo, Fortify ti reindirizzerà all’URI configurata tramite l’opzione di configurazione home nel file di configurazione fortify della tua applicazione. Se la richiesta di login era una richiesta XHR, verrà restituita una risposta HTTP 200.

Se la richiesta non ha avuto successo, l’utente verrà reindirizzato nuovamente alla schermata di login e gli errori di validazione saranno disponibili tramite la variabile condivisa $errors variabile della template Blade. Oppure, nel caso di una richiesta XHR, gli errori di validazione saranno restituiti con una risposta HTTP 422.

Personalizzare l’Autenticazione Utente

Fortify recupera e autentica automaticamente l’utente in base alle credenziali fornite e al guard di autenticazione configurato per la tua applicazione. Tuttavia, potresti voler personalizzare completamente il modo in cui le credenziali di accesso vengono autenticate e gli utenti vengono recuperati. Fortunatamente, Fortify ti consente di fare questo facilmente utilizzando il metodo Fortify::authenticateUsing.

Questo metodo accetta una closure che riceve la richiesta HTTP in arrivo. La closure è responsabile di validare le credenziali di accesso associate alla richiesta e di restituire l’istanza utente corrispondente. Se le credenziali non sono valide o nessun utente viene trovato, la closure dovrebbe restituire null o false. Di solito, questo metodo dovrebbe essere chiamato dal metodo boot del tuo FortifyServiceProvider:

use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::authenticateUsing(function (Request $request) {
        $user = User::where('email', $request->email)->first();

        if ($user &&
            Hash::check($request->password, $user->password)) {
            return $user;
        }
    });

    // ...
}

Authentication Guard

Puoi personalizzare il guard di autenticazione utilizzato da Fortify all’interno del file di configurazione fortify della tua applicazione. Tuttavia, devi assicurarti che il guard configurato sia un’implementazione di Illuminate\Contracts\Auth\StatefulGuard. Se stai cercando di usare Laravel Fortify per autenticare una SPA, dovresti utilizzare il guard predefinito web di Laravel in combinazione con Laravel Sanctum.

Personalizzazione della Pipeline di Autenticazione

Laravel Fortify autentica le richieste di accesso attraverso una pipeline di classi invocabili. Se desideri, puoi definire una pipeline personalizzata di classi attraverso le quali le richieste di accesso vengono elaborate. Ogni classe dovrebbe avere un metodo __invoke che riceve l’istanza in arrivo di Illuminate\Http\Request e, come middleware, una variabile $next che viene invocata per passare la richiesta alla classe successiva nella pipeline.

Per definire la tua pipeline personalizzata, puoi utilizzare il metodo Fortify::authenticateThrough. Questo metodo accetta una closure che dovrebbe restituire l’array di classi attraverso le quali elaborare la richiesta di accesso. Solitamente, questo metodo viene chiamato dal metodo boot della tua classe App\Providers\FortifyServiceProvider.

L’esempio seguente contiene la definizione della pipeline predefinita che puoi utilizzare come punto di partenza per le tue modifiche:

use Laravel\Fortify\Actions\AttemptToAuthenticate;
use Laravel\Fortify\Actions\CanonicalizeUsername;
use Laravel\Fortify\Actions\EnsureLoginIsNotThrottled;
use Laravel\Fortify\Actions\PrepareAuthenticatedSession;
use Laravel\Fortify\Actions\RedirectIfTwoFactorAuthenticatable;
use Laravel\Fortify\Features;
use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;

Fortify::authenticateThrough(function (Request $request) {
    return array_filter([
            config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
            config('fortify.lowercase_usernames') ? CanonicalizeUsername::class : null,
            Features::enabled(Features::twoFactorAuthentication()) ? RedirectIfTwoFactorAuthenticatable::class : null,
            AttemptToAuthenticate::class,
            PrepareAuthenticatedSession::class,
    ]);
});

Limitazione delle Autenticazioni

Per impostazione predefinita, Fortify limiterà i tentativi di autenticazione utilizzando il middleware EnsureLoginIsNotThrottled. Questo middleware limita i tentativi che sono unici per una combinazione di nome utente e indirizzo IP.

Alcune applicazioni potrebbero richiedere un approccio diverso per limitare i tentativi di autenticazione, come ad esempio limitare solo per indirizzo IP. Pertanto, Fortify ti permette di specificare il tuo limitatore di frequenza tramite l’opzione di configurazione fortify.limiters.login. Naturalmente, questa opzione di configurazione si trova nel file config/fortify.php della tua applicazione.

Utilizzare una combinazione di limitazione, autenticazione a due fattori e un firewall per applicazioni web esterno (WAF) fornirà la difesa più robusta per i tuoi utenti legittimi dell’applicazione.

Personalizzazione dei Reindirizzamenti

Se il tentativo di accesso ha successo, Fortify ti reindirizzerà all’URI configurato tramite l’opzione di configurazione home nel file di configurazione fortify della tua applicazione. Se la richiesta di accesso era una richiesta XHR, verrà restituita una risposta HTTP 200. Dopo che un utente esce dall’applicazione, verrà reindirizzato all’URI /.

Se hai bisogno di una personalizzazione avanzata di questo comportamento, puoi legare le implementazioni dei contratti LoginResponse e LogoutResponse nel service container di Laravel. In genere, questo dovrebbe essere fatto all’interno del metodo register della classe App\Providers\FortifyServiceProvider della tua applicazione:

use Laravel\Fortify\Contracts\LogoutResponse;

/**
 * Register any application services.
 */
public function register(): void
{
    $this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
        public function toResponse($request)
        {
            return redirect('/');
        }
    });
}

Autenticazione a Due Fattori

Quando la funzionalità di autenticazione a due fattori di Fortify è abilitata, l’utente deve inserire un codice numerico a sei cifre durante il processo di autenticazione. Questo codice viene generato utilizzando una password monouso basata sul tempo (TOTP) che può essere ottenuta da qualsiasi applicazione di autenticazione mobile compatibile con TOTP, come Google Authenticator.

Prima di iniziare, assicurati che il modello App\Models\User della tua applicazione utilizzi il trait Laravel\Fortify\TwoFactorAuthenticatable:

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;

class User extends Authenticatable
{
    use Notifiable, TwoFactorAuthenticatable;
}

Successivamente, crea una schermata nella tua applicazione dove gli utenti possono gestire le impostazioni di autenticazione a due fattori. Questa schermata dovrebbe permettere all’utente di abilitare o disabilitare l’autenticazione a due fattori, oltre a rigenerare i codici di recupero per l’autenticazione a due fattori.

Per impostazione predefinita, l’array features del file di configurazione fortify indica che le impostazioni di autenticazione a due fattori di Fortify richiedono la conferma della password prima della modifica. Pertanto, la tua applicazione dovrebbe implementare la funzionalità di conferma della password di Fortify prima di procedere.

Abilitare l’Autenticazione a Due Fattori

Per iniziare ad abilitare l’autenticazione a due fattori, la tua applicazione deve effettuare una richiesta POST all’endpoint /user/two-factor-authentication definito da Fortify. Se la richiesta ha successo, l’utente verrà reindirizzato all’URL precedente e la variabile di sessione status sarà impostata su two-factor-authentication-enabled. Puoi rilevare questa variabile di sessione status nei tuoi template per mostrare il messaggio di successo appropriato. Se la richiesta era una richiesta XHR, verrà restituita una risposta HTTP 200.

Dopo aver scelto di abilitare l’autenticazione a due fattori, l’utente deve ancora "confermare" la configurazione dell’autenticazione a due fattori fornendo un codice di autenticazione valido. Pertanto, il tuo messaggio di "successo" dovrebbe istruire l’utente che è ancora necessaria la conferma dell’autenticazione a due fattori:

@if (session('status') == 'two-factor-authentication-enabled')
    <div class="mb-4 font-medium text-sm">
        Per favore, completa la configurazione dell'autenticazione a due fattori qui sotto.
    </div>
@endif

Successivamente, dovresti mostrare il codice QR per l’autenticazione a due fattori affinché l’utente lo scansiona nella sua applicazione di autenticazione. Se stai usando Blade per renderizzare il frontend della tua applicazione, puoi recuperare l’SVG del codice QR utilizzando il metodo twoFactorQrCodeSvg disponibile sull’istanza dell’utente:

$request->user()->twoFactorQrCodeSvg();

Se stai costruendo un frontend basato su JavaScript, puoi effettuare una richiesta XHR GET all’endpoint /user/two-factor-qr-code per recuperare il codice QR dell’autenticazione a due fattori dell’utente. Questo endpoint restituirà un oggetto JSON contenente una chiave svg.

Confermare l’Autenticazione a Due Fattori

Oltre a mostrare il codice QR per l’autenticazione a due fattori dell’utente, dovresti fornire un campo di testo in cui l’utente possa inserire un codice di autenticazione valido per "confermare" la configurazione dell’autenticazione a due fattori. Questo codice deve essere inviato all’applicazione Laravel tramite una richiesta POST all’endpoint /user/confirmed-two-factor-authentication definito da Fortify.

Se la richiesta ha successo, l’utente verrà reindirizzato all’URL precedente e la variabile di sessione status sarà impostata a two-factor-authentication-confirmed:

@if (session('status') == 'two-factor-authentication-confirmed')
    <div class="mb-4 font-medium text-sm">
        Autenticazione a due fattori confermata e abilitata con successo.
    </div>
@endif

Se la richiesta all’endpoint di conferma dell’autenticazione a due fattori è stata fatta tramite una richiesta XHR, verrà restituita una risposta HTTP 200.

Visualizzazione dei codici di recupero

Dovresti anche mostrare i codici di recupero a due fattori dell’utente. Questi codici di recupero consentono all’utente di autenticarsi se perde l’accesso al proprio dispositivo mobile. Se stai usando Blade per renderizzare il frontend della tua applicazione, puoi accedere ai codici di recupero tramite l’istanza dell’utente autenticato:

(array) $request->user()->recoveryCodes()

Se stai costruendo un frontend basato su JavaScript, puoi effettuare una richiesta XHR GET all’endpoint /user/two-factor-recovery-codes. Questo endpoint restituirà un array JSON contenente i codici di recupero dell’utente.

Per rigenerare i codici di recupero dell’utente, la tua applicazione dovrebbe effettuare una richiesta POST all’endpoint /user/two-factor-recovery-codes.

Autenticazione con Autenticazione a Due Fattori

Durante il processo di autenticazione, Fortify reindirizzerà automaticamente l’utente alla schermata di sfida per l’autenticazione a due fattori della tua applicazione. Tuttavia, se la tua applicazione sta effettuando una richiesta di login XHR, la risposta JSON restituita dopo un tentativo di autenticazione riuscito conterrà un oggetto JSON con una proprietà booleana two_factor. Dovresti verificare questo valore per sapere se devi reindirizzare alla schermata di sfida per l’autenticazione a due fattori della tua applicazione.

Per iniziare a implementare la funzionalità di autenticazione a due fattori, dobbiamo istruire Fortify su come restituire la nostra vista di sfida per l’autenticazione a due fattori. Tutta la logica di rendering delle viste di autenticazione di Fortify può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Di solito, dovresti chiamare questo metodo dal metodo boot della classe App\Providers\FortifyServiceProvider della tua applicazione:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::twoFactorChallengeView(function () {
        return view('auth.two-factor-challenge');
    });

    // ...
}

Fortify si occuperà di definire la rotta /two-factor-challenge che restituisce questa vista. Il tuo template two-factor-challenge dovrebbe includere un form che effettua una richiesta POST all’endpoint /two-factor-challenge. L’azione /two-factor-challenge si aspetta un campo code che contiene un token TOTP valido oppure un campo recovery_code che contiene uno dei codici di recupero dell’utente.

Se il tentativo di login ha successo, Fortify reindirizzerà l’utente all’URI configurato tramite l’opzione di configurazione home nel file di configurazione fortify della tua applicazione. Se la richiesta di login era una richiesta XHR, verrà restituita una risposta HTTP 204.

Se la richiesta non ha successo, l’utente verrà reindirizzato nuovamente alla schermata di sfida per l’autenticazione a due fattori e gli errori di validazione saranno disponibili tramite la variabile condivisa $errors variabile del template Blade. Oppure, nel caso di una richiesta XHR, gli errori di validazione saranno restituiti con una risposta HTTP 422.

Disabilitare l’Autenticazione a Due Fattori

Per disabilitare l’autenticazione a due fattori, la tua applicazione deve effettuare una richiesta DELETE all’endpoint /user/two-factor-authentication. Ricorda, gli endpoint di autenticazione a due fattori di Fortify richiedono la conferma della password prima di essere chiamati.

Registrazione

Per iniziare a implementare la funzionalità di registrazione della nostra applicazione, dobbiamo istruire Fortify su come restituire la nostra vista "register". Ricorda, Fortify è una libreria di autenticazione senza frontend. Se desideri un’implementazione frontend delle funzionalità di autenticazione di Laravel già pronta, dovresti usare un kit di avvio dell’applicazione.

Tutta la logica di rendering delle viste di Fortify può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Di solito, dovresti chiamare questo metodo dal metodo boot della tua classe App\Providers\FortifyServiceProvider:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::registerView(function () {
        return view('auth.register');
    });

    // ...
}

Fortify definirà automaticamente la rotta /register che restituisce questa vista. Il tuo template register dovrebbe includere un form che effettua una richiesta POST all’endpoint /register definito da Fortify.

L’endpoint /register si aspetta i campi name (stringa), email / username (stringa), password e password_confirmation. Il nome del campo email / username deve corrispondere al valore di configurazione username definito nel file di configurazione fortify della tua applicazione.

Se il tentativo di registrazione ha successo, Fortify reindirizzerà l’utente all’URI configurato tramite l’opzione di configurazione home nel file di configurazione fortify della tua applicazione. Se la richiesta era una richiesta XHR, verrà restituita una risposta HTTP 201.

Se la richiesta non ha avuto successo, l’utente verrà reindirizzato nuovamente alla schermata di registrazione e gli errori di validazione saranno disponibili tramite la variabile condivisa $errors variabile del template Blade. Oppure, nel caso di una richiesta XHR, gli errori di validazione saranno restituiti con una risposta HTTP 422.

Personalizzazione della Registrazione

È possibile personalizzare il processo di validazione e creazione dell’utente modificando l’azione App\Actions\Fortify\CreateNewUser generata durante l’installazione di Laravel Fortify.

Reimpostazione della Password

Richiedere un Link per il Reset della Password

Per iniziare a implementare la funzionalità di reset della password della nostra applicazione, dobbiamo istruire Fortify su come restituire la nostra vista "password dimenticata". Ricorda, Fortify è una libreria di autenticazione headless. Se desideri un’implementazione frontend delle funzionalità di autenticazione di Laravel già pronte, dovresti usare un starter kit per applicazioni.

Tutta la logica di rendering delle viste di Fortify può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Di solito, dovresti chiamare questo metodo dal metodo boot della classe App\Providers\FortifyServiceProvider della tua applicazione:

use Laravel\Fortify\Fortify;

/**
 * Avvia i servizi dell'applicazione.
 */
public function boot(): void
{
    Fortify::requestPasswordResetLinkView(function () {
        return view('auth.forgot-password');
    });

    // ...
}

Fortify si occuperà di definire l’endpoint /forgot-password che restituisce questa vista. Il tuo template forgot-password dovrebbe includere un modulo che effettua una richiesta POST all’endpoint /forgot-password.

L’endpoint /forgot-password si aspetta un campo stringa email. Il nome di questo campo / colonna del database dovrebbe corrispondere al valore di configurazione email nel file di configurazione fortify della tua applicazione.

Gestione della risposta alla richiesta di collegamento per il reset della password

Se la richiesta del link per il reset della password è andata a buon fine, Fortify reindirizzerà l’utente all’endpoint /forgot-password e invierà un’email con un link sicuro che potrà usare per reimpostare la sua password. Se la richiesta era una XHR request, verrà restituita una risposta HTTP 200.

Dopo essere stato reindirizzato nuovamente all’endpoint /forgot-password dopo una richiesta riuscita, la variabile di sessione status può essere usata per mostrare lo stato del tentativo di richiesta del link per il reset della password.

Il valore della variabile di sessione $status corrisponderà a una delle stringhe di traduzione definite nel file linguistico passwords della tua applicazione. Se desideri personalizzare questo valore e non hai pubblicato i file linguistici di Laravel, puoi farlo tramite il comando Artisan lang:publish:

@if (session('status'))
    <div class="mb-4 font-medium text-sm text-green-600">
        {{ session('status') }}
    </div>
@endif

Se la richiesta non è andata a buon fine, l’utente verrà reindirizzato nuovamente alla schermata per richiedere il link per il reset della password e gli errori di validazione saranno disponibili tramite la variabile condivisa $errors Blade template variable. Oppure, nel caso di una richiesta XHR, gli errori di validazione saranno restituiti con una risposta HTTP 422.

Reimpostare la Password

Per completare l’implementazione della funzionalità di reimpostazione della password della nostra applicazione, dobbiamo istruire Fortify su come restituire la vista "reimposta password".

Tutta la logica di rendering delle viste di Fortify può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Di solito, dovresti chiamare questo metodo dal metodo boot della classe App\Providers\FortifyServiceProvider della tua applicazione:

use Laravel\Fortify\Fortify;
use Illuminate\Http\Request;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::resetPasswordView(function (Request $request) {
        return view('auth.reset-password', ['request' => $request]);
    });

    // ...
}

Fortify si occuperà di definire la route per visualizzare questa vista. Il tuo template reset-password dovrebbe includere un form che effettua una richiesta POST a /reset-password.

L’endpoint /reset-password si aspetta un campo testo email, un campo password, un campo password_confirmation e un campo nascosto chiamato token che contiene il valore di request()->route('token'). Il nome del campo "email" / colonna del database dovrebbe corrispondere al valore di configurazione email definito nel file di configurazione fortify della tua applicazione.

Gestire la Risposta del Reset della Password

Se la richiesta di reset della password ha avuto successo, Fortify reindirizzerà alla rotta /login in modo che l’utente possa accedere con la nuova password. Inoltre, verrà impostata una variabile di sessione status per mostrare lo stato di successo del reset nella schermata di login:

@if (session('status'))
    <div class="mb-4 font-medium text-sm text-green-600">
        {{ session('status') }}
    </div>
@endif

Se la richiesta era una richiesta XHR, verrà restituita una risposta HTTP 200.

Se la richiesta non ha avuto successo, l’utente verrà reindirizzato nuovamente alla schermata di reset della password e gli errori di validazione saranno disponibili tramite la variabile condivisa $errors variabile del template Blade. Oppure, nel caso di una richiesta XHR, gli errori di validazione verranno restituiti con una risposta HTTP 422.

Personalizzare il Reset delle Password

Il processo di reset della password può essere personalizzato modificando l’azione App\Actions\ResetUserPassword che è stata generata durante l’installazione di Laravel Fortify.

Verifica Email

Dopo la registrazione, potresti voler che gli utenti verifichino il loro indirizzo email prima di continuare ad accedere alla tua applicazione. Per iniziare, assicurati che la funzionalità emailVerification sia abilitata nell’array features del tuo file di configurazione fortify. Successivamente, devi verificare che la tua classe App\Models\User implementi l’interfaccia Illuminate\Contracts\Auth\MustVerifyEmail.

Una volta completati questi due passaggi di configurazione, i nuovi utenti registrati riceveranno un’email che li invita a verificare la proprietà del loro indirizzo email. Tuttavia, dobbiamo informare Fortify su come mostrare la schermata di verifica email che informa l’utente di dover cliccare sul link di verifica presente nell’email.

Tutta la logica di rendering delle viste di Fortify può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Tipicamente, dovresti chiamare questo metodo dal metodo boot della classe App\Providers\FortifyServiceProvider della tua applicazione:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::verifyEmailView(function () {
        return view('auth.verify-email');
    });

    // ...
}

Fortify si occuperà di definire la rotta che mostra questa vista quando un utente viene reindirizzato all’endpoint /email/verify dal middleware verified integrato di Laravel.

Il tuo template verify-email dovrebbe includere un messaggio informativo che istruisce l’utente a cliccare sul link di verifica email che è stato inviato al loro indirizzo email.

Reinviare i link di verifica email

Se lo desideri, puoi aggiungere un pulsante al template verify-email della tua applicazione che invia una richiesta POST all’endpoint /email/verification-notification. Quando questo endpoint riceve una richiesta, verrà inviata un’email con un nuovo link di verifica all’utente, permettendogli di ottenere un nuovo link di verifica se quello precedente è stato accidentalmente eliminato o perso.

Se la richiesta di reinviare l’email con il link di verifica ha avuto successo, Fortify reindirizzerà l’utente all’endpoint /email/verify con una variabile di sessione status, permettendoti di mostrare un messaggio informativo all’utente per informarlo che l’operazione è andata a buon fine. Se la richiesta era una richiesta XHR, verrà restituita una risposta HTTP 202:

@if (session('status') == 'verification-link-sent')
    <div class="mb-4 font-medium text-sm text-green-600">
        È stato inviato un nuovo link di verifica via email!
    </div>
@endif

Proteggere le Rotte

Per specificare che una rotta o un gruppo di rotte richiede che l’utente abbia verificato il proprio indirizzo email, devi allegare il middleware verified di Laravel alla rotta. L’alias del middleware verified è registrato automaticamente da Laravel e serve come alias per il middleware Illuminate\Auth\Middleware\EnsureEmailIsVerified:

Route::get('/dashboard', function () {
    // ...
})->middleware(['verified']);

Conferma Password

Durante lo sviluppo della tua applicazione, potresti avere azioni che richiedono all’utente di confermare la propria password prima che l’azione venga eseguita. Tipicamente, queste rotte sono protette dal middleware integrato di Laravel password.confirm.

Per iniziare a implementare la funzionalità di conferma password, dobbiamo istruire Fortify su come restituire la vista di "conferma password" della nostra applicazione. Ricorda, Fortify è una libreria di autenticazione headless. Se desideri un’implementazione frontend delle funzionalità di autenticazione di Laravel già completata per te, dovresti usare un starter kit per applicazioni.

Tutta la logica di rendering delle viste di Fortify può essere personalizzata utilizzando i metodi appropriati disponibili tramite la classe Laravel\Fortify\Fortify. Tipicamente, dovresti chiamare questo metodo dal metodo boot della classe App\Providers\FortifyServiceProvider della tua applicazione:

use Laravel\Fortify\Fortify;

/**
 * Bootstrap any application services.
 */
public function boot(): void
{
    Fortify::confirmPasswordView(function () {
        return view('auth.confirm-password');
    });

    // ...
}

Fortify si occuperà di definire l’endpoint /user/confirm-password che restituisce questa vista. Il tuo template confirm-password dovrebbe includere un modulo che invia una richiesta POST all’endpoint /user/confirm-password. L’endpoint /user/confirm-password si aspetta un campo password che contiene la password corrente dell’utente.

Se la password corrisponde alla password attuale dell’utente, Fortify reindirizzerà l’utente alla rotta che stava tentando di accedere. Se la richiesta era una richiesta XHR, verrà restituita una risposta HTTP 201.

Se la richiesta non ha successo, l’utente sarà reindirizzato indietro alla schermata di conferma della password e gli errori di validazione saranno disponibili tramite la variabile di template Blade condivisa $errors. Oppure, nel caso di una richiesta XHR, gli errori di validazione saranno restituiti con una risposta HTTP 422.

Lascia un commento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *