Bei der Protokollierung über Python-Anfragen wurde die Meldung 403 empfangen, dass die CSRF-Überprüfung fehlgeschlagen ist

StackOverflow https://stackoverflow.com//questions/9692780

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.

War es hilfreich?

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.

Siehe die CSRF-Dokumentation.

Es könnte sich lohnen, nachzuschlagen Klient wenn Sie eine testgetriebene Entwicklung durchführen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top