Come personalizzazione il middleware di Laravel 11

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.
- Come personalizzare il middleware di laravel
- Come reindirizzare utenti e ospiti a un indirizzo definito
- Come reindirizzare gli ospiti a un indirizzo specifico
- Come specificare quali cookie escludere dalla crittografia
- Esclusione di route dalla protezione CSRF
- Esclusione di route dalla URL Signature Validation
- Impedire la conversione di stringhe vuote in null
- Come prevenire il trimming delle stringhe nelle richieste
- Personalizzazioni avanzate del middleware
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
.
Come specificare quali cookie escludere dalla crittografia
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.