En este art铆culo vamos a ver como evitar el error TokenMismatchException que producen los formularios que no son utilizados en cierto tiempo.
El Error聽TokenMismatchException
Seguramente les ha pasado que permanecen demasiado tiempo en un formulario聽 y cuando terminan de completarlo y lo env铆an, obtienen un error relacionado a TokenMismatchException, esto es porque el token CSRF ha expirado.
La protecci贸n CSRF es fundamental para que usuarios maliciosos no realicen peticiones que el usuario original no realizo (pueden averiguar m谩s sobre protecci贸n CSRF haciendo clic aqu铆).
Pero ahora bien, 驴qu茅 pasa con esos formularios que permanecen en constantemente en una pagina y producen el mismo error? Un ejemplo de esos formularios son el de cerrar sesi贸n, el formulario de suscripci贸n al bolet铆n de noticias (newsletter), o cualquier otro formulario que permanece en la pagina pero no es el protagonista de la misma.
Estos formularios producen el error聽TokenMismatchException ya que, est谩n mucho tiempo ah铆 sin que nadie interact煤e con ellos y cuando un usuario decide enviar informaci贸n con alguno de estos formularios, obtiene este error:
Quitar protecci贸n CSRF a una URL
Para evitar la excepci贸n TokenMismatchException en ciertos formularios, Laravel nos brinda la posibilidad de quitar la protecci贸n CSRF a una URL en particular. Existe un array llamado $except
que nos permite agregar聽las URL que no deseamos que tengan protecci贸n CSRF.聽El array se encuentra en聽app/Http/Middleware/VerifyCsrfToken.php
Supongamos que queremos excluir al formulario de cierre de sesi贸n de la protecci贸n CSRF. Entonces, debemos agregar la URL聽/logout
(que es la URL hacia donde apunta el formulario de cierre de sesi贸n), en el arreglo de excepciones:
De esta forma, el formulario de cierre de sesi贸n nunca arrojar谩 el error聽TokenMismatchException ya que lo hemos excluido de la validaci贸n CSRF.聽
Versi贸n disponible en Laravel
Esta funcionalidad esta disponible desde la versi贸n 5.0 de Laravel.聽馃槈
Conclusi贸n
Es un buena opci贸n que nos brinda Laravel para no producir el error聽TokenMismatchException (en otros art铆culos comento algunas herramientas de protecci贸n mas, como en el art铆culo de Proteger Rutas en Laravel). Pero se debe utilizar con conciencia y conociendo el sistema que estamos desarrollando, ya que la protecci贸n CSRF es muy importante.
Hola amigo, buena tarde… Sabes como podr铆a evitar o capturar ese evento. Es decir en una petici贸n ajax cuando ha expirado la sesi贸n el usuario no se da cuenta y sigue enviando el formulario.
pesima respuesta