Frage

Ich bin auf meiner Seite viele Fehler aus der CSRF Django Middleware bekomme Die einzigen Fehler, die ich bin erhalten (die Version aus dem SVN Stamm.): CSRF failure:. Reason = CSRF-Token fehlenden oder falschen

Wie könnte ich diagnostizieren, wo diese CSRF Fehler herkommen? Ich kann den CSRF Fehler selbst nicht dazu führen, aber ich Setup die Seite mir eine E-Mail, sobald die CSRF Fehler Ansicht ausgelöst wird, damit ich weiß, dass es oft geschieht.

War es hilfreich?

Lösung

Ich kämpfte wirklich alles richtig zu machen, aber schließlich tat. Hier waren meine wichtigsten Fragen (Django 1.2 beta):

  1. Stellen Sie sicher, dass Ihre Middleware Sachen richtig ist, nach der Version von Django, dass Sie verwenden. Dies ist in Djangos Literatur abgedeckt online.
  2. Stellen Sie sicher, dass Sie die {% csrf_token%} in jeder Form, gerade nach dem Starttag für das Formular
  3. Das war mein Hauptproblem, stellen Sie sicher, dass alle Ihre Formen haben eine Go-to-Seite, das heißt nicht Aktion tun = „“ in dem Formular.
  4. Stellen Sie sicher, dass Ihre Einstellungen von E-Mails alle die richtigen sind. Ich hatte so etwas zu tun:

    EMAIL_HOST = 'mail.my-domain.com' EMAIL_HOST_USER = ‚meinen Benutzernamen auf dem Server‘ EMAIL_HOST_PASSWORD = 'passwd' EMAIL_PORT = ‚26‘ # oft scheint 25 oder 26 auf viele der Forum-Beiträge, die ich gelesen DEFAULT_FROM_EMAIL='noreply@domain.com‘# auf gehosteten Domains, stellen Sie sicher, dass es einrichten und Senden SERVER_EMAIL = 'noreply@domain.com' # gleiche E-Mail, wie oben

    1. Fügen Sie die request_context bis zum Ende Ihrer render_to_response

    Rückkehr render_to_response ( 'contact.htm', { 'Favicon': r '____ ico',                                    'mehr Zeug':"......"                                    'mehr Zeug':"......"                                    'mehr Zeug':"......"                                       },                        context_instance = Request (Anfrage))

Stellen Sie sicher, Sie haben:

TEMPLATE_CONTEXT_PROCESSORS = (
     "django.contrib.auth.context_processors.csrf",
     .....
   )

in Ihrer settings.py Datei.

Beachten Sie, dass dies wirklich nicht, wie man, das ist genau das, was ich tat mein Laufen zu bringen. Der Grund dafür jetzt Entsendung ist, dass ich so viele Leute auf Foren finden Sie in diesem Thema Resort diskutieren gerade drehen die csrf_token aus.

Andere Tipps

Ein CSRF Fehler passieren soll, wenn die Middleware erfolgreich eine Cross-Site Request Forgery Angriff stoppt. Wahrscheinlich der beste Weg, um sicherzustellen, dass dies der Fall ist es Ihre Web-Server-Protokolle zu überprüfen und Sie sollten Anfragen sehen, die nicht auf eine frühere Anfrage verwendet sind.

Auch sollten Sie die Reihenfolge des MIDDLEWARE_CLASSES in Ihrer settings.py Datei überprüfen. aussehen soll wie folgt:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
)

LocaleMiddleware am Ende. Für mich war die Lösung die RequestContext Instanz und die Ordnung.

Stellen Sie sicher, dass View-Funktion für GET Anfrage sieht wie folgt aus:

def login_view():
c = {}
c.update(csrf(request))
request.session.set_expiry(0)
if request.method == 'GET':
  return render_to_response('newform.html',<b>c</b>)

Dann überprüfen Sie die Ansicht für Ihren newform.html, muss es ausgeblendetes Feld hat.

<`form action="" method="post" name="loginform"> <`div style='display:none'`><`input type='hidden' name='csrfmiddlewaretoken' value='6f4dee99ab2f5e7201e057cb63' />

Hier Aktion kann die gleiche Seite verweisen, action="".

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