Middlewares

De Wiki Proyectos Beta
Ir a la navegación Ir a la búsqueda

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');