> Faqs > Cómo aplicar el middleware csrf de Laravel solamente en las rutas determinadas

Cómo aplicar el middleware csrf de Laravel solamente en las rutas determinadas

Quiero eliminar la protección de CSRF para todo el sitio de Laravel, excepto para unas rutas determinadas. Realmente la aplicación no lo necesita, excepto las rutas de login y un par de formularios que están visibles a usuarios generales, el resto es de acceso restringido y nos resulta suficiente con la protección del acceso por clave, al ser un panel de acceso para usuarios determinados (no se permite registro de personas externas).

El caso es que veo que el middleware se puede configurar para que no afecte a las rutas determinadas.

protected $except = [ ... ];

Pero esto es poco práctico en nuestro caso, porque no es posible indicar todas las rutas de la aplicación. En realidad sería al reves, indicar que rutas sí queremos que tengan la protección por csrf.

¿Cómo se puede conseguir de una manera sencilla?

Respuestas

Bien. Si quieres eliminar el middleware de scrf de Laravel tienes que quitarlo del listado del array "protected $middlewareGroups".

Con eso consigues que ese middleware no se active en ninguna de las páginas del sitio. Ahora, para que se active solamente en unas rutas determinadas de tu aplicación, tienes que colocarlo como un middleware de ruta, en el array "$routeMiddleware".

protected $routeMiddleware = [
    'csrf' => \App\Http\Middleware\VerifyCsrfToken::class,
    // ...
];

Ahora que tienes un middleware de ruta (observa que le hemos puesto un nombre sencillo de recordar y de usar a este middleware) puedes configurarlo indicando el nombre de este middleware en la ruta que necesites. Estos middlewares de ruta los puedes asignar desde la declaración de la ruta en el archivo de tus rutas, pero también en el constructor del controlador.

Como solamente deseas aplicar este middleware al sistema de login, podrías hacerlo desde el archivo app/Http/Controllers/Auth/LoginController.php

Allí en el constructor puedes definir que vas a aplicar el middleware:

public function __construct()
{
    $this->middleware('guest')->except('logout');
    $this->middleware('csrf');
}
Miguel Angel
3145 140 209 17
Muchas gracias! me ha ayudado un montón