php laravel csrf laravel-5.5

php - "La página ha caducado debido a la inactividad"-Laravel 5.5



csrf laravel-5.5 (16)

Mi página de registro muestra el formulario correctamente con CsrfToken ( {{ csrf_field() }} ) presente en el formulario).

HTML de formulario

<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route(''register'') }}"> {{ csrf_field() }} .... </form>

Estoy usando autenticación incorporada para los usuarios. No ha cambiado nada excepto las rutas y redireccionamientos.

Cuando envío el formulario (justo después de volver a cargar también), indica que la página ha caducado debido a la inactividad. Por favor, actualice y pruebe de nuevo. error.

Mi ser, me estoy perdiendo 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 matriz. Lo cambió a archivo y el error desapareció ahora. Pero, ¿qué pasa si uso array?


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 14:08:26 UTC 2226), por lo que el tiempo en la cookie de sesión de mi navegador había expirado hace más de 200 años.


Cambié el permiso de almacenamiento y el error desapareció. Parecía que la falta de permiso era el problema.

sudo chmod -R 775 storage/


Debe tener tipo de archivo

FileName.blade.php en laravel
FileName.erb.rb en Ruby and Rails

y anexar cualquiera

  1. {{ csrf_token() }}
  2. <input type="hidden" name="_token" value="{{ csrf_token() }}" >
  3. <meta name="csrf-token" content="{{ csrf_token() }}">

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, establezca la variable seguro en falso

''secure'' => env(''SESSION_SECURE_COOKIE'', false),



He descubierto dos soluciones para evitar estos errores 1) agregando $ protegido excepto = [''/ yourroute''] posible deshabilitar la inspección de token csrf desde la raíz definida. 2) solo comente / App / Http / Middleware / VerifyCsrfToken :: línea de clase en el grupo de middleware protegido en el núcleo


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:

{{ csrf_field() }}

O excluya su ruta en la aplicación / Http / Middleware / VerifyCsrfToken.php

protected $except = [ ''your/route'' ];


Mi caso se resolvió con SESSION_DOMAIN , en mi máquina local tuvo que establecerse en xxx.localhost . Estaba causando conflictos con la producción xxx.com , xxx.com que se configuró directamente en el archivo de configuración xxx.com .


Para aquellos que todavía tienen problemas y nada ayudó. Preste atención al parámetro php.ini mbstring.func_overload. Tiene que establecerse en 0. Y mbstring.internal_encoding establece en UTF-8. En mi caso eso fue un problema.


Parte de la información se almacena en la cookie que está relacionada con versiones anteriores de laravel en desarrollo. Entonces está en conflicto con los tokens generados por csrf que son generados por las versiones de otros. Simplemente borre la cookie y pruebe.


Prueba todos ellos.

composer dump-autoload php artisan optimize php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear


Tenía la aplicación con múltiples subdominios y la cookie de sesión era el problema entre ellos. Borrar las cookies resolvió mi problema.

Además, intente configurar SESSION_DOMAIN en el archivo .env . Use el subdominio exacto que está navegando.


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ó.


establecer mbstring.func_overload = 2

Me ayudó


Respuesta corta

Agregue la entrada de ruta para register en la app/Http/Middleware/VerifyCsrfToken.php

protected $except = [ ''/routeTo/register'' ];

y borre el caché y la ruta del caché con los comandos:

php artisan cache:clear && php artisan route:clear

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á contra su tiempo de vencimiento, establecido en el campo SESSION_LIFETIME en el archivo config/session.php .

Si mantiene el sitio abierto durante más tiempo que el vencimiento e intenta realizar una solicitud, se evaluará este token y se devolverá el error de vencimiento. Por lo tanto, para omitir esta validación en formularios que están fuera de las funciones de los usuarios autenticados (como registrarse o iniciar sesión), puede agregar la ruta excepto en app/Http/Middleware/VerifyCsrfToken.php .


Si llega a esta respuesta directamente desde una búsqueda , asegúrese de haber agregado el token csrf a su formulario con {{ csrf_field() }} como el OP.

Si tiene su controlador de sesión configurado para archivar:

Puede tener algo que ver con que la ruta_almacenamiento no se pueda escribir. Aquí es donde almacena los datos de 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 matriz. La matriz es solo para pruebas. Como los datos no son persistentes, no podrá comparar el token en la próxima solicitud.

El controlador de matriz se usa durante las pruebas y evita que los datos almacenados en la sesión persistan.

https://laravel.com/docs/5.5/session#configuration

Verifique config / session.php

Por último, un problema que acabo de tener, teníamos un proyecto que tenía el dominio de sesión y la configuración segura en config / session.php pero el sitio de desarrollo no estaba usando HTTPS (SSL / TLS). Esto causó este error genérico ya que sessions.secure se estableció en verdadero de manera predeterminada.