Wykonuję wywołanie Ajax, ale wciąż otrzymuję ten błąd:
419 (stan nieznany)
Nie mam pojęcia, co to powoduje, widziałem w innych postach, że musi coś zrobić z tokenem csrf, ale nie mam formularza, więc nie wiem, jak to naprawić.
mój telefon:
$('.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);
}
});
});
Moja trasa:
Route::post('fetch-company/{companyId}', 'HomeController@fetchCompany');
Moja metoda kontrolera
/**
* Fetches a company
*
* @param $companyId
*
* @return array
*/
public function fetchCompany($companyId)
{
$company = Company::where('id', $companyId)->first();
return response()->json($company);
}
Ostatecznym celem jest wyświetlenie czegoś z odpowiedzi w elemencie html.
<meta name="csrf-token" content="{{ csrf_token() }}">
{{csrf_field()}}
w swoim formularzu ??{'_token': {{csrf_token()}}}
Odpowiedzi:
Użyj tego w sekcji głównej:
i pobierz token csrf w Ajax:
Proszę zapoznać się z dokumentacją Laravel csrf_token
źródło
419 Unknown status
? Dlaczego nie419 Invalid CSRF token
lub jakaś istniejąca, użyteczna odpowiedź? Skąd to pochodzi? Czemu? EtcInnym sposobem rozwiązania tego problemu jest użycie
_token
pola w danych Ajax i ustawienie wartości{{csrf_token()}}
w module blade. Oto działający kod, który właśnie wypróbowałem na końcu.źródło
Jest to podobne do odpowiedzi Kannana. Jednak rozwiązuje to problem polegający na tym, że token nie powinien być wysyłany do witryn międzydomenowych. Spowoduje to ustawienie nagłówka tylko wtedy, gdy jest to żądanie lokalne.
HTML:
JS:
źródło
użyj tego na swojej stronie
aw twoim Ajax użył go w danych:
to jest:
Dzięki.
źródło
Możliwe, że domena sesji nie jest zgodna z adresem URL aplikacji i / lub hostem używanym do uzyskania dostępu do aplikacji.
1.) Sprawdź plik .env:
2.) Sprawdź config / session.php
Sprawdź wartości, aby upewnić się, że są poprawne.
źródło
Jeśli wykonałeś już powyższe sugestie i nadal masz problem.
Upewnij się, że zmienna env:
Ustawia się,
false
jeśli nie masz certyfikatu SSL, na przykład lokalnego.źródło
w moim przypadku zapomniałem dodać dane wejściowe csrf_token do przesłanego formularza. więc zrobiłem ten HTML:
JS:
źródło
<input type="hidden" id="_token" value="{{ csrf_token() }}">
jest necesary nawet jeśli robimy złożyć whitouth ajax, inaczej mam dziwny błąd 419Nawet jeśli masz
csrf_token
, jeśli uwierzytelniasz akcje kontrolera za pomocą Laravel,Policies
możesz również uzyskać odpowiedź 419. W takim przypadku powinieneś dodać niezbędne funkcje strategii do swojejPolicy
klasy.źródło
Jeśli ładujesz .js z pliku, musisz ustawić zmienną z csrf_token w swoim "głównym" pliku .blade.php, w którym importujesz .js i użyć tej zmiennej w wywołaniu ajax.
index.blade.php
anotherfile.js
źródło
niektóre refs =>
źródło
po prostu serializuj dane formularza i rozwiąż swój problem.
źródło
Musisz zdobyć token CSRF.
Po zrobieniu tego samego problemu, po prostu dodaj ten metatag
< meta name="csrf-token" content="{{ csrf_token() }}" >
Po tym również pojawia się błąd, możesz sprawdzić błąd Ajax. Następnie sprawdź również błąd Ajax
źródło
źródło
Aktualizacja Laravel 2019, Nigdy nie myślałem, że to opublikuję, ale dla tych programistów, takich jak ja, używających api do pobierania przeglądarki na Laravel 5.8 i nowszych. Musisz przekazać swój token za pomocą parametru headers.
źródło
Miałem
SESSION_SECURE_COOKIE
ustawione na true więc moje środowisko dev nie działa podczas logowania, więc dodałemSESSION_SECURE_COOKIE=false
do pliku mojego dev .env i wszystkie działa dobrze mój błąd się zmienia plik session.php zamiast dodanie zmiennej do pliku .env.źródło
Ten błąd występuje również, jeśli zapomniałeś go uwzględnić w żądaniu przesłania AJAX (POST), contentType: false, processData: false,
źródło
Pojawił się ten błąd, mimo że wysyłałem już token CSRF. Okazało się, że na serwerze nie ma już miejsca.
źródło
Działa to świetnie w przypadkach, w których nie potrzebujesz formularza.
użyj tego w nagłówku:
a to w kodzie JavaScript:
źródło
Prostym sposobem naprawienia nieznanego 419 statusu na konsoli jest umieszczenie tego skryptu w FORMULARZU. {{csrf_field ()}}
źródło
To zadziałało dla mnie:
Po tym ustaw regularne połączenie AJAX. Przykład:
źródło