Solución Error 419 Página expirada en Laravel

Solución Error 419 Página expirada en Laravel. Al estar interactuando con su proyecto Laravel en algunos casos se suele recibir errores 419 Expired en Laravel. Vamos a desglosar punto a punto el por qué puede pasar esto y cómo solucionarlo de manera practica.
Causas que originan el error 419 en Laravel:
- Vencimiento del token: Los tokens CSRF tienen una vida útil limitada por razones de seguridad. Por ejemplo, dejar una página con un formulario abierta durante muchas puede provocar que el token caduque y por ende Laravel genera un error 419 cuando finalmente se envía el formulario al no coincidir los tokens.
- Directiva CSRF no declarada en formularios: Si olvida agregar la directiva @csrf en cualquier formulario, Laravel bloqueará la solicitud porque espera un token CSRF válido, esto se verifica para cada solicitud POST, PUT, PATCH y DELETE.
- Vencimiento de la sesión de usuario: El token CSRF está vinculado a la sesión del usuario. Si la sesión vence, el token se invalida y el envío del formulario falla.
- Mezcla de https con http: Es decir cuando su proyecto esta configurada con una solicitud a través de HTTPS y usted intenta acceder a ella a través de HTTP, usted se encontrara este error.
Otras posibles causas:
- Caché o cookies del navegador: a veces, las cookies obsoletas o los datos almacenados en caché pueden interferir con la validación
CSRF
. Es recomendable borrar la cache - Configuración del servidor: Si la configuración de su servidor no maneja las sesiones correctamente (por ejemplo, si pierde datos de la sesión o no encuentra la ruta para almacenar), esto también puede generar errores 419.
¿Por qué aparece el error “419 Página expirada en Laravel”?
El error 419 Página expirada de laravel suele deberse a un problema de falta de coincidencia de tokens CSRF. Los tokens CSRF
protegen su aplicación contra envíos de formularios no autorizados al verificar que las solicitudes las realicen usuarios autenticados dentro de la aplicación.
En Laravel, a menudo se utiliza la directiva @csrf en formularios, que genera un
token CSRF
único y oculto para cada sesión de formulario.
Veamos un ejemplo de una correcta integración en formularios
<form action="/students" method="post">
@csrf
<!-- Mas campos de formulario -->
<button type="submit">Enviar</button>
</form>
Una vez que este presente en el formulario, el token de la CSRF
será revisado, y ya no verá un error de 419.
Solución de error 419 Página expirada en Laravel
Si has intentado limpiar caché con php artisan
, rutas, vistas y configuración, pero sin resultados positivos. Aquí, les traigo la solución.
La mayoría de los errores 419 se lanzan cuando el token csrf está siendo desajustado o no declarado.
- Intente usar la ventana de incógnito, Si funcionó, entonces el problema está en las memorias caché..
- Puede ver manualmente la ficha csrf: {{ csrf_token() }}
- Puedes aumentar el tiempo de vida de la sesión en
config/session.php
cambiando el lifetime value en el fichero.env
utilizando estoSESSION_LIFETIME=120
- Compruebe tanto el formulario como su sitio utilice el protocolo
HTTPS
- Comprobar archivo
.env
, asegúrate de tener ambas cosasSESSION_DOMAIN
yAPP_URL
sean iguales
Solucion Error 419 en Ajax jQuery
Si estás usando la llamada AJAX, entonces tienes que pasar el token csrf
. veamos un ejemplo de uso
<script>
$(document).ready(function() {
$('#estado_id').on('change', function() {
var idCountry = this.value;
$("#state-dropdown").html('');
$.ajax({
url: "{{ url('api/fetch-states') }}",
type: "POST",
data: {
country_id: idCountry,
_token: '{{ csrf_token() }}'
},
dataType: 'json',
success: function(result) {
console.log(result)
}
});
});
});
</script>
Otra solución que ha funcionado:
Abrir el archivo config/session.php y realizar algunos cambios:
Actualizar los valores:
'lifetime' => 120,
'domain' => env('SESSION_DOMAIN', null),
'secure' => env('SESSION_SECURE_COOKIE', false),
Para finalizar,
Espero que este articulo le haya ayudado a entender lo que causa un error de 419 páginas en Laravel, y que sea capaz de manejar los formularios de manera correcta. Ademas, de ampliar la vida útil de SESSION_LIFETIME
en Laravel.