laravel middleware

laravel middleware

Laravel 11 è caratterizzato da un middleware semplificato, e da una configurazione molto snella.

Le personalizzazioni del middleware possono essere fatte direttamente nel file bootstrap/app.php.

In questo articolo ti farò vedere diversi esempi di configurazione middleware di laravel, base e configurazione avanzata.

3 minuti

Come personalizzare il middleware di laravel

Come reindirizzare utenti e ospiti a un indirizzo definito

Nel caso in cui volessimo reindirizzare, sia utenti autenticati che utenti ospiti a un indirizzo specifico, possiamo utilizzare il metodo redirectTo(). In particolare l’impostazione deve essere fatta nel file bootstrap/app.php, vediamo un esempio in cui gli ospiti vengono sempre reindirizzati alla pagina di login, mentre gli utenti che conosciamo, cioè gli autenticati, vengono reindirizzati sulla dashboard di lavoro:

->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectTo(
        guests: '/admin/login',
        users: '/dashboard'
    );
})

In precedenza, questa configurazione veniva gestita in Authenticated.php e RedirectIfAuthenticated.php

Come reindirizzare gli ospiti a un indirizzo specifico

Per impostare un reindirizzamento specifico per gli ospiti, è possibile utilizzare il metodo redirectGuestsTo(). In particolare l’impostazione deve essere fatta nel file bootstrap/app.php, vediamo un esempio in cui gli ospiti vengono sempre reindirizzati alla pagina di login:

->withMiddleware(function (Middleware $middleware) {
    $middleware->redirectGuestsTo('/admin/login');
})

Nelle versioni precedenti, questo reindirizzamento veniva gestito all’interno del file di middleware Authenticated.php.

Per escludere cookie dalla crittografia, il middleware di laravel 11 ci mette a disposizione il metodo encryptCookies(), dove il parametro ci consente di specificare i cookie. Vediamo un esempio:

php->withMiddleware(function (Middleware $middleware) {
    $middleware->encryptCookies(except: [
        'foo',
        'bar',
    ]);
})

Nelle versioni precedenti questa funzionalità era inserita in EncryptCookies.php.

Esclusione di route dalla protezione CSRF

Qualora servisse escludere alcune rotte dalla protezione CSRF, Laravel Middleware ci mette a disposizione il metodo validateCsrfTokens(), che opportunamente utilizzato ci consente di escludere le rotte specificate.

Nel seguente codice, vediamo un esempio in cui escludiamo le rotte /foo/* e /bar. Il codice deve essere inserito nel file bootstrap/app.php

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(except: [
        '/foo/*',
        '/bar',
    ]);
})

Nelle precedenti versioni di Laravel, questa impostazione veniva fatta nel file VerifyCsrfToken.php.

Esclusione di route dalla URL Signature Validation

Per escludere una rotta (o route) dalla convalida della firma URL, laravel middleware ci mette a disposizione il metodo validateSignatures(), vediamo un esempio:

->withMiddleware(function (Middleware $middleware) {
$middleware->validateSignatures(except: [
'/api/*',
]);
})

Nelle versioni precedenti di Laravel, la cofigurazione Middleware veniva gestita nel file ValidateSignature.php.

Impedire la conversione di stringhe vuote in null

Per controllare il comportamento della conversione di stringhe vuote in null, utilizzare il metodo:convertEmptyStringsToNull()

->withMiddleware(function (Middleware $middleware) {
    $middleware->convertEmptyStringsToNull(except: [
        fn ($request) => $request->path() === 'foo/bar',
    ]);
})

Questo approccio sostituisce la necessità di rimuovere da ConvertEmptyStringsToNullapp/Http/Kernel.php.

Come prevenire il trimming delle stringhe nelle richieste

Per impedire il taglio delle stringhe su percorsi specifici, è possibile utilizzare il metodo:trimStrings()

->withMiddleware(function (Middleware $middleware) {
    $middleware->trimStrings(except: [
        '/foo',
    ]);
})

In precedenza, questa impostazione era gestita in TrimStrings.php.

Personalizzazioni avanzate del middleware

Gestione dello stack middleware globale

È possibile aggiungere, rimuovere o sostituire il middleware all’interno dello stack globale:

->withMiddleware(function (Middleware $middleware) {
    $middleware->prepend(SomeMiddleware::class);
    $middleware->append(AnotherMiddleware::class);
    $middleware->remove(UnwantedMiddleware::class);
    $middleware->replace(OldMiddleware::class, NewMiddleware::class);
})

Utilizzo dei gruppi middleware

Laravel consente personalizzazioni all’interno di gruppi middleware:

->withMiddleware(function (Middleware $middleware) {
    $middleware->group('custom', [
        FirstMiddleware::class,
        SecondMiddleware::class,
    ]);
    
    $middleware->prependToGroup('web', NewWebMiddleware::class);
    $middleware->appendToGroup('api', NewApiMiddleware::class);
    $middleware->removeFromGroup('web', OldWebMiddleware::class);
    $middleware->replaceInGroup('api', OldApiMiddleware::class, NewApiMiddleware::class);
})

Opzioni middleware specifiche per API

Per le applicazioni incentrate sulle API, è possibile sfruttare i metodi progettati specificamente per le API:

->withMiddleware(function (Middleware $middleware) {
    $middleware->statefulApi(); // Enables Sanctum's stateful middleware
    $middleware->throttleApi('custom_limiter', true); // Sets API rate limiting
})

Configurazione di proxy e host attendibili

Se l’applicazione si trova dietro un proxy, è possibile configurare proxy e host attendibili:

->withMiddleware(function (Middleware $middleware) {
    $middleware->trustHosts(['example.com', '*.example.com']);
    $middleware->trustProxies(['192.168.1.1', '192.168.1.2']);
})

Abilitazione dell’autenticazione della sessione

Per le applicazioni che richiedono sessioni autenticate nel gruppo “web”, abilitarle con:

->withMiddleware(function (Middleware $middleware) {
    $middleware->authenticateSessions();
})

La configurazione middleware di Laravel 11 offre semplicità e flessibilità. Che tu stia personalizzando i percorsi, proteggendo l’API o regolando gli stack middleware, queste opzioni ti consentono di ottimizzare il middleware della tua applicazione per soddisfare le tue esigenze.

Autore