Middlewares
Middleware en Laravel
En Laravel, el middleware es una capa intermedia que se ejecuta entre la solicitud HTTP y la respuesta. Permite filtrar y modificar solicitudes antes de que lleguen al controlador y también puede modificar la respuesta antes de enviarla al cliente. Los middlewares son útiles para tareas como autenticación, autorización, y manejo de CORS.
Propósito del Middleware
El middleware permite realizar acciones comunes para múltiples rutas o solicitudes, como:
- Autenticación: Verificar que el usuario esté autenticado.
- Autorización: Comprobar permisos o roles del usuario.
- Manejo de CORS: Controlar el acceso a recursos de diferentes dominios.
- Registro de Actividades: Registrar datos de solicitud y respuesta.
Crear un Middleware
Para crear un middleware personalizado, utiliza el comando Artisan:
php artisan make:middleware NombreDelMiddleware
Esto generará un archivo de middleware en app/Http/Middleware.
Ejemplo
Para crear un middleware llamado CheckAge, usa:
php artisan make:middleware CheckAge
Esto creará un archivo CheckAge.php en app/Http/Middleware.
Definir la Lógica del Middleware
Dentro del archivo del middleware, define la lógica que debe ejecutarse:
namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class CheckAge { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle(Request $request, Closure $next) { if ($request->age < 18) { return response('Forbidden', 403); } return $next($request); } }
En este ejemplo, el middleware verifica si el parámetro age de la solicitud es menor de 18 y devuelve un error 403 si es así.
Registrar el Middleware
Para que Laravel reconozca el middleware, debes registrarlo en bootstrap/app.php. Hay dos tipos de registro:
Global Middleware: Se ejecuta en todas las solicitudes. Se registra en la propiedad $middleware: Para agregar un middleware a la pila global, puedes utilizar el siguiente código:
use App\Http\Middleware\EnsureTokenIsValid; ->withMiddleware(function (Middleware $middleware) { $middleware->append(EnsureTokenIsValid::class); })
En este ejemplo:
EnsureTokenIsValid es el middleware que deseas agregar.
El $middleware objeto proporcionado al withMiddleware cierre es una instancia de Illuminate\Foundation\Configuration\Middleware, que es responsable de gestionar el middleware asignado a las rutas de tu aplicación.
El método append añade el middleware al final de la lista de middleware global.
Si prefieres agregar un middleware al principio de la lista (para que se ejecute antes que otros middleware globales), utiliza el método prepend en lugar de append:
$middleware->prepend(EnsureTokenIsValid::class);
Middleware de Ruta: Se aplica a rutas específicas. Se puede invocar el método middleware al definir la ruta.
use App\Http\Middleware\EnsureTokenIsValid; Route::get('/profile', function () { // ... })->middleware(EnsureTokenIsValid::class);
Middleware de Autenticación y Autorización
Laravel incluye middleware para autenticación y autorización, como auth y can. Puedes aplicarlos de la siguiente manera:
Route::get('/dashboard', function () { // Panel de control })->middleware('auth');
Para autorización basada en políticas:
Route::get('/admin', function () { // Área de administración })->middleware('can:access-admin');