it-swarm.com.de

Django - CSRF-Token fehlt oder ist falsch

Ich habe gerade mein Django auf 1.4 aktualisiert. Beim Versuch, mein Anmeldeformular abzusenden, wird jedoch die folgende Fehlermeldung angezeigt:

Verbotene (403) CSRF-Überprüfung fehlgeschlagen. Anfrage abgebrochen. Grund für den Fehler: CSRF-Token fehlt oder ist falsch.

In meiner settings.py (MIDDLEWARE_CLASSES) musste ich die folgende Zeile entfernen, da sie jetzt veraltet ist:

'Django.middleware.csrf.CsrfResponseMiddleware',

Und dann fing ich an, diesen Fehler zu bekommen.

Einige notwendige Informationen: Urls.py

url(r'^login/$', 'Django.contrib.auth.views.login', {'template_name': 'registration/login.html'}, name='login')
MIDDLEWARE_CLASSES = (
    'Django.middleware.gzip.GZipMiddleware',
    '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.csrf.CsrfResponseMiddleware',
    'Django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
)

login.html

{% extends "base.html" %}
{% block title %} Login {% endblock %}
{% block content %}



   <div id="text">
        <table>
          <form action="" method="post">
          {% csrf_token %}
            <tr>
                <td><label for="username">Email:</label></td>
                <td><input type="text" name="username" value="" id="username"></td>
            </tr>
            <tr>
                <td><label for="password">Password:</label></td>
                <td><input type="password" name="password" value="" id="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="Login" />
            {% if next %}
                <input type="hidden" name="next" value="{{ next }}" /></td>
            {% else %}
                <input type="hidden" name="next" value="/" /></td>
            {% endif %}
            </tr>
          </form>
        </table>


      {% if form.errors %}
        <p class="error">User or password incorrect</p>
      {% endif %}
    </div>
{% endblock %}

Weiß jemand, wie man dieses Problem löst?

12
Thomas

Der Code sieht gut aus, Django 1.3 und 1.4 auth.views.login verwendet RequestContext korrekt. Bitte prüfe:

  • Löschen Sie zunächst die Daten des Browsers und versuchen Sie es erneut
  • Was ist der Wert des eingereichten csrfmiddlewaretoken?
  • Importierst du richtig Django?
  • Stellen Sie sicher, dass UserWarning in der Konsole wie folgt vorhanden ist: "In einer Vorlage wurde {% csrf_token%} verwendet, aber der Kontext hat den Wert nicht bereitgestellt. Dies wird normalerweise dadurch verursacht, dass RequestContext nicht verwendet wird."
7
okm
  1. Für 1.3 und 1.4 sollte "Django.middleware.csrf.CsrfResponseMiddleware" "Django.middleware.csrf.CsrfViewMiddleware" heißen.
  2. Außerdem hat das Löschen der Cookies von Google Chrome für mich funktioniert.
3
Jason Adleberg

Ich hatte ein ähnliches Problem, bei dem meine App auf HTTPS bereitgestellt wurde. Ich musste das Flag CSRF_COOKIE_HTTPONLY auf false setzen, damit der Client-Server auf das CSRF-Cookie zugreifen kann.

0
webbyfox