Bei der Protokollierung über Python-Anfragen wurde die Meldung 403 empfangen, dass die CSRF-Überprüfung fehlgeschlagen ist
-
13-12-2019 - |
Frage
Ich verwende Pinax und versuche, einen Anmeldetest durchzuführen account
Projekt, Verwendung requests
Modul.
Ich tat dies
def test001_login(self):
#cookies = {'csrftoken': 'a8356fd05b25fad7004994fd5da89596'}
r = requests.post(self.loginurl, data={'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
print r.status_code
print r.text
print r.cookies
Der zurückgegebene Cookie ist leer!!Mit get
Methode, ich bekomme einen Cookie.Was verursacht dieses Problem?
r.text
Ergebnis:
<p>Reason given for failure:</p>
<pre>
No CSRF or session cookie.
</pre>
<p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
<a
href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's
CSRF mechanism</a> has not been used correctly. For POST forms, you need to
ensure:</p>
Ich habe versucht, durchzuhalten cookies
aber es gab mir immer noch den Fehler 403.
Lösung
Ihr Beitrag übergibt das CSRF-Token nicht an den Login.Funktioniert das:
r = requests.post(self.loginurl, data={'csrf_token': django.middleware.csrf.get_token(), 'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True)
Andere Tipps
CSRF funktioniert, indem es ein verstecktes Feld mit einem variierenden Token in das Formular einfügt und es dann beim Posten des Formulars testet.Sie erhalten diese Fehlermeldung, weil Sie das Token nicht in den Beitrag aufgenommen haben.Sie können es umgehen, es ausschalten oder die „richtigen“ Komponententests verwenden.
Es könnte sich lohnen, nachzuschlagen Klient wenn Sie eine testgetriebene Entwicklung durchführen