Resumen: mostrar cómo solucionar el error 419 Page Expired en Laravel, mismo que se ocasiona al enviar un formulario o al hacer una petición AJAX.
Explicación del error
Este error de programación en Laravel nos puede ocurrir al empezar a usar este framework. Se trata de que enviamos un formulario pero en lugar de que los datos se guarden, aparece un error 419 y dice “Page expired”.
El problema es que no estamos enviando el token CSRF con el formulario. Es decir, tenemos algo así:
<form action="{{route("guardar_limite_compras_clientes")}}" class="form-inline"
method="post">
<input type="hidden" name="id_producto" value="{{$producto->id}}">
<input type="hidden" name="id_cliente" value="{{$clienteSeleccionado->id}}">
<div class="form-group mr-2">
<label class="mr-2">Cantidad: </label>
<input min="0" required value="{{$producto->cantidadProductos}}" type="number"
name="cantidad_productos"
class="form-control"
step="any">
</div>
<div class="form-group">
<label class="mr-2">Meses: </label>
<input min="0" required value="{{$producto->numeroMeses}}" type="number"
name="numero_meses"
class="form-control"
step="any">
</div>
<button class="btn btn-info ml-2">
<i class="fa fa-check-circle"></i>
</button>
</form>
Podemos tener varios campos, pero dentro del formulario debe estar un input hidden con el token CSRF para prevenir ataques.
Solución
Simplemente agrega el token CSRF a tu formulario. Con blade esto es fácil, solo debes colocar @csrf
dentro del form. Así (línea 4):
<form action="{{route("guardar_limite_compras_clientes")}}" class="form-inline"
method="post">
...
@csrf
...
</form>
Eso va a generar (al renderizarse) algo así:
<input type="hidden" name="_token" value="ggmY2I1Gjt0wDFRU1ds0cP9H4g5dJaFg7X6wXgXU">
De este modo estarás enviando el token CSRF en la petición, y de este modo Laravel dejará de mostrar ese error.
Si en cambio este error te aparece al hacer peticiones AJAX, mira cómo agregarlo a las peticiones asíncronas.
Recomiendo revisar los archivos controladores y de rutas. Cuando quedan caracteres y espacios antes de <?php, puede arrojar este error. (Error 419 Page Expired)