Un middleware es un mecanismo para inspeccionar y filtrar las solicitudes HTTP que llegan a la aplicación.
Permite intercalar lógica antes o después de que la solicitud llegue al controlador.Por ejemplo, Laravel incluye un middleware de autenticación.
Si el usuario no está autenticado, redirige a la pantalla de login; si lo está, deja pasar la solicitud sin más.Además de la autenticación, puedes crear middleware para tareas como logging, protección CSRF o limitación de tasa. Para los detalles de la protección CSRF en Laravel 13, consulta Protección CSRF.
El middleware definido por el usuario se coloca habitualmente en el directorio app/Http/Middleware.
Crea un middleware con el comando Artisan make:middleware.
php artisan make:middleware EnsureTokenIsValid
Se genera app/Http/Middleware/EnsureTokenIsValid.php.
Escribe la lógica de procesamiento en el método handle.
<?phpnamespace App\Http\Middleware;use Closure;use Illuminate\Http\Request;use Symfony\Component\HttpFoundation\Response;class EnsureTokenIsValid{ /** * Procesa la solicitud entrante * * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next): Response { if ($request->input('token') !== 'my-secret-token') { return redirect('/home'); } return $next($request); }}
Al llamar a $next($request), la solicitud pasa al siguiente paso.
Si no se cumple la condición, detén la solicitud devolviendo un redirect o una respuesta.
El middleware puede ejecutar lógica antes o después de la solicitud.
// Antes de la solicitudpublic function handle(Request $request, Closure $next): Response{ // Aquí va el pre-proceso return $next($request);}
// Después de la respuestapublic function handle(Request $request, Closure $next): Response{ $response = $next($request); // Aquí va el post-proceso return $response;}
Para aplicarlo solo a ciertas rutas, usa el método middleware en la definición.
use App\Http\Middleware\EnsureTokenIsValid;Route::get('/profile', function () { // ...})->middleware(EnsureTokenIsValid::class);
Para aplicar varios middleware, pásalos como array.
Route::get('/', function () { // ...})->middleware([First::class, Second::class]);
Para excluir un middleware en una ruta concreta, usa withoutMiddleware.
use App\Http\Middleware\EnsureTokenIsValid;Route::middleware([EnsureTokenIsValid::class])->group(function () { Route::get('/', function () { // A esta ruta se le aplica el middleware }); Route::get('/profile', function () { // A esta ruta se le excluye el middleware })->withoutMiddleware([EnsureTokenIsValid::class]);});