Mi página de registro muestra el formulario correctamente con CsrfToken ( {{ csrf_field() }}
) presente en el formulario).
Formulario HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
Estoy usando autenticación incorporada para los usuarios. No han cambiado nada excepto las rutas y redireccionamientos.
Cuando envío el formulario (justo después de recargar también), indica que la página ha caducado debido a la inactividad. Por favor, actualice y pruebe de nuevo. error.
Dios mío, me falta una cosa muy pequeña. Pero no estoy seguro de qué es. ¿Alguna ayuda?
Actualizar
Encontré el problema. El controlador de sesión se configuró en array. Lo cambié a archivo y el error desapareció ahora. Pero, ¿qué pasa si uso una matriz?
php
laravel
csrf
laravel-5.5
Sougata Bose
fuente
fuente
array
. Lo cambié a archivo y el error desapareció ahora. Pero, ¿qué pasa si uso una matriz?Respuestas:
Si llega a esta respuesta directamente desde una búsqueda , asegúrese de haber agregado el token csrf a su formulario con
{{ csrf_field() }}
el OP.Si tiene el controlador de sesión configurado para archivo:
Puede tener algo que ver con que storage_path no se pueda escribir. Aquí es donde almacena los datos de la sesión con respecto a los tokens si está utilizando sesiones basadas en archivos. Se puede verificar con
is_writable(config('session.files'))
Para el OP, el controlador de sesión se configuró en array. Array es solo para pruebas. Dado que los datos no se conservan, no podrá comparar el token en la siguiente solicitud.
https://laravel.com/docs/5.5/session#configuration
Compruebe config / session.php
Por último, un problema que acabo de tener, teníamos un proyecto que tiene el dominio de sesión y la configuración segura en config / session.php pero el sitio de desarrollo no usaba HTTPS (SSL / TLS). Esto provocó este error genérico ya que session.secure se estableció en true de forma predeterminada.
fuente
Carbon::setTestNow($time);
en las pruebas no lo estaba borrando al usarloCarbon::setTestNow();
después.Me encontré con el mismo problema en Laravel 5.5. En mi caso, sucedió después de cambiar una ruta de GET a POST. El problema fue porque olvidé pasar un token CSRF cuando cambié a POST.
Puede publicar un token CSRF en su formulario llamando a:
O excluya su ruta en la aplicación / Http / Middleware / VerifyCsrfToken.php
fuente
csrf_field()
presente en la forma. La respuesta aceptada describe el problema. Gracias.Pruébalos todos.
fuente
Esto se debe a que
Illuminate\Session\TokenMismatchException
mire este ejemplo de código cómo manejarlo correctamente:fuente
Mi caso se resolvió con
SESSION_DOMAIN
, en mi máquina local tenía que configurarsexxx.localhost
. Estaba causando conflictos con la producciónSESSION_DOMAIN
,xxx.com
que se estableció directamente en el archivo de configuración session.php.fuente
file
ocookie
?Parte de la información se almacena en la cookie que está relacionada con versiones anteriores de laravel en desarrollo. Por lo tanto, está en conflicto con los tokens generados por csrf que son generados por versiones de otros. Simplemente borre la cookie y pruébelo.
fuente
<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">
tipo de código en html generado?Para aquellos que todavía tienen problemas y nada les ayudó. Preste atención al parámetro php.ini mbstring.func_overload. Tiene que establecerse en 0. Y mbstring.internal_encoding establecido en UTF-8. En mi caso eso fue un problema.
fuente
Cambié el permiso de almacenamiento y el error desapareció. Parecía que la falta de permiso era el problema.
fuente
agregue
@csrf
el formulario y también vaya a VerifyCsrfToken.phpaplicación-> Http-> Middleware-> VerifyCsrfToken.php
fuente
En mi caso, el sitio estaba bien en el servidor pero no en el local. Entonces recuerdo que estaba trabajando en un sitio web seguro.
Entonces, en el archivo config.session.php, configure la variable segura en falso
fuente
Tenía la aplicación con varios subdominios y la cookie de sesión era el problema entre ellos. Borrar las cookies resolvió mi problema.
Además, trate de establecer el
SESSION_DOMAIN
en .env archivo. Utilice el subdominio exacto que está navegando.fuente
Asegúrese de tener la hora correcta del sistema en su servidor web. En mi caso, la máquina vagabunda estaba en el futuro (26 de enero a las 14:08:26 UTC 2226), así que, por supuesto, el tiempo en la cookie de sesión de mi navegador había expirado hace más de 200 años.
fuente
establecer mbstring.func_overload = 2
Me ayudó
fuente
He descubierto dos soluciones para evitar estos errores 1) agregando protected $ except = ['/ yourroute'] posible deshabilitar la inspección del token csrf desde la raíz definida. 2) simplemente comente \ App \ Http \ Middleware \ VerifyCsrfToken :: class line en el grupo de middleware protegido en el kernel
fuente
Tuve el mismo problema, pero el problema no está en el marco sino en el navegador. No sé por qué, pero Google Chrome bloquea las cookies automáticamente, en mi caso. Después de permitir las cookies, el problema se resolvió.
fuente
Respuesta corta
Agregue la entrada de ruta para
register
enapp/Http/Middleware/VerifyCsrfToken.php
y borre el caché y la ruta del caché con los comandos:
Detalles
Cada vez que accede a un sitio de Laravel, se genera un token, incluso si la sesión no se ha iniciado. Luego, en cada solicitud, este token (almacenado en las cookies) se validará con su tiempo de vencimiento, establecido en el
SESSION_LIFETIME
campo enconfig/session.php
archivo.Si mantiene el sitio abierto por más del tiempo de vencimiento e intenta realizar una solicitud, este token será evaluado y el error de vencimiento volverá. Por lo tanto, para omitir esta validación en formularios que están fuera de las funciones de los usuarios autenticados (como registro o inicio de sesión), puede agregar la ruta excepto en
app/Http/Middleware/VerifyCsrfToken.php
.fuente
Muchas veces sucede porque está probando el proyecto en una fecha anterior
fuente
Solución:
use la nueva pestaña de incógnito y luego pruébela nuevamente.
razón:
en mi caso, otro usuario inició sesión con mi panel de administración
fuente