Saya melakukan panggilan ajax tapi saya terus mendapatkan kesalahan ini:
419 (status tidak diketahui)
Tidak tahu apa yang menyebabkan ini saya lihat di posting lain itu harus melakukan sesuatu dengan csrf token tapi saya tidak punya bentuk jadi saya tidak tahu bagaimana cara memperbaikinya.
panggilanku:
$('.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);
}
});
});
Rute saya:
Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');
Metode pengontrol saya
/**
* Fetches a company
*
* @param $companyId
*
* @return array
*/
public function fetchCompany($companyId)
{
$company = Company::where('id', $companyId)->first();
return response()->json($company);
}
Tujuan utamanya adalah untuk menampilkan sesuatu dari respons dalam elemen html.
<meta name="csrf-token" content="{{ csrf_token() }}">
{{csrf_field()}}
di formulir Anda ??{'_token': {{csrf_token()}}}
Jawaban:
Gunakan ini di bagian kepala:
dan dapatkan token csrf di ajax:
Silakan merujuk Dokumentasi Laravel csrf_token
sumber
419 Unknown status
? Mengapa tidak419 Invalid CSRF token
atau ada tanggapan yang bermanfaat dan ada? Dari mana asalnya? Mengapa? DllCara lain untuk mengatasi ini adalah dengan menggunakan
_token
bidang dalam data ajax dan mengatur nilai{{csrf_token()}}
in blade. Berikut adalah kode yang saya coba pada akhirnya.sumber
Ini mirip dengan jawaban Kannan. Namun, ini memperbaiki masalah di mana token tidak boleh dikirim ke situs lintas domain. Ini hanya akan mengatur tajuk jika itu adalah permintaan lokal.
HTML:
JS:
sumber
gunakan ini di halaman Anda
dan di ajax Anda menggunakannya dalam data:
itu adalah:
Terima kasih.
sumber
Mungkin domain sesi Anda tidak cocok dengan URL aplikasi Anda dan / atau host yang digunakan untuk mengakses aplikasi.
1.) Periksa file .env Anda:
2.) Periksa config / session.php
Verifikasi nilai untuk memastikan semuanya benar.
sumber
Jika Anda sudah melakukan saran di atas dan masih memiliki masalah.
Pastikan variabel env:
Diatur ke
false
jika Anda tidak memiliki sertifikat SSL, seperti di lokal.sumber
dalam kasus saya, saya lupa menambahkan input csrf_token ke formulir yang dikirimkan. jadi saya melakukan HTML ini:
JS:
sumber
<input type="hidden" id="_token" value="{{ csrf_token() }}">
perlu bahkan jika kita melakukan submit whitouth ajax, kalau tidak saya punya kesalahan 419 anehMeskipun Anda memiliki
csrf_token
, jika Anda mengautentikasi tindakan pengontrol menggunakan Laravel,Policies
Anda dapat memiliki 419 respons juga. Dalam hal ini Anda harus menambahkan fungsi kebijakan yang diperlukan diPolicy
kelas Anda .sumber
Jika Anda memuat .js dari file, Anda harus menetapkan variabel dengan csrf_token di file .blade.php "utama" tempat Anda mengimpor .js dan menggunakan variabel dalam panggilan ajax Anda.
index.blade.php
anotherfile.js
sumber
beberapa referensi =>
sumber
serialkan data formulir dan selesaikan masalah Anda.
sumber
Anda harus mendapatkan token csrf ..
Setelah melakukan masalah yang sama muncul, Cukup Tambahkan tag meta ini
< meta name="csrf-token" content="{{ csrf_token() }}" >
Setelah ini juga kesalahan muncul, Anda dapat memeriksa kesalahan Ajax. Kemudian Juga periksa kesalahan Ajax
sumber
sumber
2019 Pembaruan Laravel, Tidak pernah terpikir saya akan memposting ini tetapi untuk para pengembang seperti saya menggunakan browser mengambil api di Laravel 5.8 dan di atas. Anda harus meneruskan token Anda melalui parameter header.
sumber
Saya telah
SESSION_SECURE_COOKIE
menetapkan true sehingga lingkungan dev saya tidak berfungsi saat masuk, jadi saya menambahkanSESSION_SECURE_COOKIE=false
ke file dev .env saya dan semua berfungsi dengan baik kesalahan saya adalah mengubah file session.php alih-alih menambahkan variabel ke file .env.sumber
Kesalahan ini juga terjadi jika Anda lupa untuk memasukkan ini, dalam permintaan pengiriman ajax Anda (POST), contentType: false, processData: false,
sumber
Mendapat kesalahan ini meskipun saya sudah mengirim token csrf. Ternyata tidak ada lagi ruang tersisa di server.
sumber
Ini berfungsi baik untuk kasus-kasus yang Anda tidak memerlukan formulir.
gunakan ini di header:
dan ini dalam kode JavaScript Anda:
sumber
Cara sederhana untuk memperbaiki 419 status yang tidak diketahui pada konsol Anda adalah dengan meletakkan skrip ini di dalam FORMULIR Anda. {{csrf_field ()}}
sumber
Ini bekerja untuk saya:
Setelah ini atur panggilan AJAX biasa. Contoh:
sumber