Eu faço uma chamada ajax, mas continuo recebendo este erro:
419 (status desconhecido)
Não faço ideia do que está causando isso, vi em outras postagens que tem a ver com o token csrf, mas não tenho forma, então não sei como consertar isso.
minha ligação:
$('.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);
}
});
});
Minha rota:
Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');
Meu método de controle
/**
* Fetches a company
*
* @param $companyId
*
* @return array
*/
public function fetchCompany($companyId)
{
$company = Company::where('id', $companyId)->first();
return response()->json($company);
}
O objetivo final é exibir algo da resposta em um elemento html.
<meta name="csrf-token" content="{{ csrf_token() }}">
{{csrf_field()}}
no seu formulário?{'_token': {{csrf_token()}}}
Respostas:
Use isso na seção principal:
e obtenha o token csrf no ajax:
Consulte a documentação do Laravel csrf_token
fonte
419 Unknown status
? Por que não419 Invalid CSRF token
ou alguma resposta útil existente? De onde isso vem? Por quê? EtcOutra maneira de resolver isso é usar o
_token
campo em dados ajax e definir o valor{{csrf_token()}}
em blade. Aqui está um código que eu tentei no meu final.fonte
Isso é semelhante à resposta de Kannan. No entanto, isso corrige um problema em que o token não deveria ser enviado para sites entre domínios. Isso definirá o cabeçalho apenas se for uma solicitação local.
HTML:
JS:
fonte
use isso na sua página
e no seu ajax usou nos dados:
isso é:
Obrigado.
fonte
É possível que o domínio da sessão não corresponda ao URL do seu aplicativo e / ou ao host usado para acessar o aplicativo.
1.) Verifique o seu arquivo .env:
2.) Verifique config / session.php
Verifique os valores para garantir que eles estejam corretos.
fonte
Se você já fez as sugestões acima e ainda está com o problema.
Certifique-se de que a variável env:
Está definido como
false
se você não tiver um certificado SSL, como no local.fonte
no meu caso, esqueci de adicionar a entrada csrf_token ao formulário enviado. então eu fiz esse HTML:
JS:
fonte
<input type="hidden" id="_token" value="{{ csrf_token() }}">
é necesary mesmo se fizermos um submeter ajax whitouth, caso contrário, eu tenho um estranho 419 erroMesmo que você tenha uma
csrf_token
, se você autentica suas ações do controlador usando o Laravel,Policies
também pode ter uma resposta 419. Nesse caso, você deve adicionar as funções de política necessárias em suaPolicy
classe.fonte
Se você estiver carregando .js de um arquivo, precisará definir uma variável com o csrf_token no arquivo "principal" .blade.php em que está importando o .js e usar a variável na sua chamada ajax.
index.blade.php
anotherfile.js
fonte
alguns refs =>
fonte
apenas serialize os dados do formulário e resolva o problema.
fonte
Você precisa obter o token csrf ..
Depois de fazer o mesmo problema, basta adicionar esta metatag
< meta name="csrf-token" content="{{ csrf_token() }}" >
Depois disso, também ocorre o erro, você pode verificar o erro do Ajax. Em seguida, verifique também o erro do Ajax
fonte
fonte
Atualização do Laravel 2019, Nunca pensei que fosse postar isso, mas para desenvolvedores como eu, usando o navegador buscar a API no Laravel 5.8 e superior. Você precisa passar seu token pelo parâmetro headers.
fonte
Eu havia
SESSION_SECURE_COOKIE
definido como true para que meu ambiente de desenvolvimento não funcionasse durante o login, portanto, adicioneiSESSION_SECURE_COOKIE=false
ao meu arquivo .env dev e tudo funciona bem. Meu erro foi alterar o arquivo session.php em vez de adicionar a variável ao arquivo .env.fonte
Esse erro também ocorre se você esquecer de incluir isso, em sua solicitação de envio de ajax (POST), contentType: false, processData: false,
fonte
Recebi esse erro, embora eu já estivesse enviando token csrf. Acabou que não havia mais espaço no servidor.
fonte
Isso funciona muito bem nos casos em que você não precisa de um formulário.
use isso no cabeçalho:
e isso no seu código JavaScript:
fonte
Uma maneira simples de corrigir um status 419 desconhecido no seu console é colocar esse script dentro do seu FORMULÁRIO. {{csrf_field ()}}
fonte
Isso funcionou para mim:
Após este conjunto, faça uma chamada AJAX regular. Exemplo:
fonte