Hago una llamada ajax pero sigo recibiendo este error:
419 (estado desconocido)
No tengo idea de qué está causando esto. Vi en otras publicaciones que tiene que ver con token csrf, pero no tengo forma, así que no sé cómo solucionarlo.
mi llamada:
$('.company-selector li > a').click(function(e) {
e.preventDefault();
var companyId = $(this).data("company-id");
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: '/fetch-company/' + companyId,
dataType : 'json',
type: 'POST',
data: {},
contentType: false,
processData: false,
success:function(response) {
console.log(response);
}
});
});
Mi ruta:
Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');
Mi método controlador
/**
* Fetches a company
*
* @param $companyId
*
* @return array
*/
public function fetchCompany($companyId)
{
$company = Company::where('id', $companyId)->first();
return response()->json($company);
}
El objetivo final es mostrar algo de la respuesta en un elemento html.
<meta name="csrf-token" content="{{ csrf_token() }}">
{{csrf_field()}}
en tu formulario ??{'_token': {{csrf_token()}}}
Respuestas:
Use esto en la sección de la cabeza:
y obtenga el token csrf en ajax:
Consulte la documentación de Laravel csrf_token
fuente
419 Unknown status
? ¿Por qué no419 Invalid CSRF token
o alguna respuesta útil existente? ¿De dónde viene? ¿Por qué? Etc.Otra forma de resolver esto es usar el
_token
campo en datos ajax y establecer el valor de{{csrf_token()}}
en blade. Aquí hay un código de trabajo que acabo de probar al final.fuente
Esto es similar a la respuesta de Kannan. Sin embargo, esto soluciona un problema donde el token no debe enviarse a sitios de dominio cruzado. Esto solo establecerá el encabezado si es una solicitud local.
HTML:
JS:
fuente
usa esto en tu página
y en tu ajax lo usaste en datos:
es decir:
Gracias.
fuente
Es posible que su dominio de sesión no coincida con la URL de su aplicación y / o el host que se utiliza para acceder a la aplicación.
1.) Verifique su archivo .env:
2.) Verifique config / session.php
Verifique los valores para asegurarse de que sean correctos.
fuente
Si ya hizo las sugerencias anteriores y aún tiene el problema.
Asegúrese de que la variable env:
Se establece en
false
si no tiene un certificado SSL, como en local.fuente
en mi caso, olvidé agregar la entrada csrf_token al formulario enviado. así que hice este HTML:
JS:
fuente
<input type="hidden" id="_token" value="{{ csrf_token() }}">
es necesario incluso si hacemos un envío con ajax sur, de lo contrario recibí un extraño error 419Aunque tenga un
csrf_token
, si está autenticando las acciones de su controlador usando Laravel,Policies
también puede tener una respuesta 419. En ese caso, debe agregar las funciones de política necesarias en suPolicy
clase.fuente
Si está cargando .js desde un archivo, debe establecer una variable con csrf_token en su archivo "main" .blade.php donde está importando .js y usar la variable en su llamada ajax.
index.blade.php
anotherfile.js
fuente
algunas referencias =>
fuente
solo serialice los datos del formulario y resuelva su problema.
fuente
Tienes que obtener el token csrf.
Después de hacer el mismo problema, solo agrega esta metaetiqueta
< meta name="csrf-token" content="{{ csrf_token() }}" >
Después de esto también surge el error, puede verificar el error de Ajax. Entonces también verifique el error Ajax
fuente
fuente
Actualización de Laravel 2019, nunca pensé que publicaría esto, pero para aquellos desarrolladores como yo que utilizamos la API de búsqueda del navegador en Laravel 5.8 y superior. Tienes que pasar tu token a través del parámetro de encabezado.
fuente
Había
SESSION_SECURE_COOKIE
establecido en true para que mi entorno de desarrollo no funcionara al iniciar sesión, así que agreguéSESSION_SECURE_COOKIE=false
a mi archivo de desarrollo .env y todo funciona bien, mi error fue cambiar el archivo session.php en lugar de agregar la variable al archivo .env.fuente
Este error también ocurre si olvidó incluir esto, en su solicitud de envío ajax (POST), contentType: false, processData: false,
fuente
Recibí este error a pesar de que ya había estado enviando el token csrf. Resultó que no quedaba más espacio en el servidor.
fuente
Esto funciona muy bien para aquellos casos en los que no necesita un formulario.
use esto en el encabezado:
y esto en tu código JavaScript:
fuente
Una forma simple de corregir un estado desconocido 419 en su consola es poner este script dentro de su FORM. {{csrf_field ()}}
fuente
Esto funcionó para mí:
Después de esto, establezca una llamada AJAX regular. Ejemplo:
fuente