Django CSRF Check Failure with Ajax POST Requests
Einführung:
Django implementiert einen Build -in-Mechanismus zum Schutz vor Cross-Site Request Forgery (CSRF)-Angriffen. Allerdings kann dieser Schutz manchmal AJAX POST-Anfragen beeinträchtigen. In diesem Artikel wird das Problem erläutert und eine Lösung bereitgestellt.
Problem:
Eine AJAX POST-Anfrage an eine Django-Ansicht kann aufgrund von Djangos CSRF mit dem Fehler 403 Forbidden fehlschlagen Schutz. Der Fehler tritt auf, wenn das CSRF-Token in der Anfrage nicht mit dem von Django generierten übereinstimmt.
Ursache:
Ajax-Anfragen (mit JavaScript) senden das möglicherweise nicht automatisch CSRF-Token im Anforderungsheader, was dazu führt, dass die CSRF-Prüfung fehlschlägt Django.
Lösung:
Um das Problem zu beheben, fügen Sie das CSRF-Token manuell zum Datenkörper der Ajax-Anfrage hinzu. Dies kann mithilfe der $.ajax-Funktion mit der Dateneigenschaft erfolgen:
$.ajax({ data: { somedata: 'somedata', moredata: 'moredata', csrfmiddlewaretoken: '{{ csrf_token }}' }, ... // other Ajax options });
Überprüfung:
Um zu überprüfen, ob das Token korrekt ist, können Sie das überprüfen Wert des csrfmiddlewaretoken-Cookies, bevor Sie die Ajax-Anfrage stellen. Dieses Cookie enthält das CSRF-Token.
Alternative:
Wie in der ursprünglichen Frage erwähnt, ist das Deaktivieren der CSRF-Prüfung für die Ansicht mithilfe des csrf_exempt-Dekorators kein idealer Ansatz . Es wird empfohlen, die Einhaltung des CSRF-Schutzmechanismus sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum schlagen meine AJAX-POST-Anfragen bei einer Django-CSRF-Prüfung fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!