Ordenar Middleware en Laravel
Concepto
En Laravel, los middlewares son componentes que se ejecutan antes o después de las solicitudes HTTP a tu aplicación. A veces, es crucial que ciertos middlewares se ejecuten en un orden específico para garantizar que la lógica de la aplicación funcione correctamente. Aunque normalmente los middlewares se ejecutan en el orden en que se asignan a las rutas, puedes especificar un orden de prioridad global para asegurarte de que se ejecuten en el orden deseado.
Dónde Escribir el Código
Para especificar la prioridad de los middlewares, debes modificar el archivo bootstrap/app.php
de tu aplicación. Este archivo es donde puedes configurar y registrar la prioridad de los middlewares.
Ejemplo de Código: Especificar Prioridad de Middleware
->withMiddleware(function (Middleware $middleware) {
$middleware->priority([
\Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class,
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
\Illuminate\Routing\Middleware\ThrottleRequests::class,
\Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class,
\Illuminate\Auth\Middleware\Authorize::class,
]);
});
Explicación del Código
En este ejemplo, estamos especificando la prioridad de los middlewares en el archivo bootstrap/app.php
. A continuación, se explica cada parte del código:
- $middleware->priority([ … ]);: Este método define el orden de prioridad de los middlewares. Los middlewares se ejecutarán en el orden en que se definen en esta lista, independientemente del orden en que se asignen a las rutas. Esto es útil cuando necesitas asegurarte de que ciertos middlewares se ejecuten antes o después de otros.
- \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class: Este middleware maneja las solicitudes precognitivas, que son solicitudes que anticipan la respuesta antes de que se complete la solicitud completa. Es importante que este middleware se ejecute primero para manejar adecuadamente estas solicitudes especiales.
- \Illuminate\Cookie\Middleware\EncryptCookies::class y \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class: Estos middlewares manejan la encriptación de cookies y la adición de cookies en cola a la respuesta. La encriptación de cookies debe ocurrir antes de que se procesen las solicitudes para garantizar la seguridad de los datos del usuario.
- \Illuminate\Session\Middleware\StartSession::class: Este middleware inicia la sesión del usuario. Es crucial que la sesión se inicie antes de que se acceda a los datos de sesión o se compartan errores de sesión.
- \Illuminate\View\Middleware\ShareErrorsFromSession::class: Este middleware comparte los errores de validación de la sesión con las vistas. Debe ejecutarse después de que la sesión se haya iniciado para acceder a los errores almacenados.
- \Illuminate\Foundation\Http\Middleware\ValidateCsrfToken::class: Este middleware valida el token CSRF para proteger la aplicación contra ataques de falsificación de solicitudes entre sitios. Debe ejecutarse antes de que se procese cualquier lógica de la aplicación para garantizar la seguridad de las solicitudes.
- \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class: Este middleware asegura que las solicitudes del frontend sean con estado, lo cual es importante para la autenticación y la gestión de sesiones.
- \Illuminate\Routing\Middleware\ThrottleRequests::class y \Illuminate\Routing\Middleware\ThrottleRequestsWithRedis::class: Estos middlewares limitan la tasa de solicitudes para proteger la aplicación contra abusos. Deben ejecutarse antes de que se procese la lógica de la aplicación para evitar sobrecargas.
- \Illuminate\Routing\Middleware\SubstituteBindings::class: Este middleware sustituye los parámetros de las rutas con sus modelos correspondientes, asegurando que las rutas funcionen correctamente con los modelos de Eloquent.
- \Illuminate\Contracts\Auth\Middleware\AuthenticatesRequests::class y \Illuminate\Auth\Middleware\Authorize::class: Estos middlewares manejan la autenticación y autorización de las solicitudes. Deben ejecutarse después de que se hayan procesado las solicitudes para garantizar que solo los usuarios autorizados puedan acceder a ciertos recursos.
Conclusión
Especificar la prioridad de los middlewares en Laravel te proporciona un control preciso sobre el orden de ejecución de los middlewares. Esto es especialmente útil cuando necesitas asegurarte de que ciertos middlewares se ejecuten antes o después de otros, independientemente del orden en que se asignen a las rutas. Es esencial entender cómo configurar la prioridad de los middlewares para mantener la integridad y el rendimiento de tu aplicación.
Enlaces
Para más información, visita la página oficial de Laravel: Laravel Middleware Documentation
También puedes ver Laravel en español en: Conozca Laravel
Etiqueta:Middleware