web-dev-qa-db-fra.com

Django - Jeton CSRF manquant ou incorrect

Je viens de mettre à jour mon Django à la version 1.4. Mais je reçois le message d'erreur suivant lorsque j'essaie de soumettre mon formulaire de connexion:

Interdit (403) La vérification de la CSRF a échoué. Demande annulée. Raison donnée pour l'échec: jeton CSRF manquant ou incorrect.

Dans mon fichier settings.py (MIDDLEWARE_CLASSES), j'ai dû supprimer la ligne suivante car elle est désormais obsolète:

'Django.middleware.csrf.CsrfResponseMiddleware',

Et puis j'ai commencé à avoir cette erreur.

Quelques informations nécessaires: 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 %}

Est-ce que quelqu'un sait comment résoudre ce problème?

12
Thomas

Le code semble correct, Django 1.3 et 1.4 auth.views.login utilise correctement RequestContext. Vérifiez s'il vous plaît:

  • Tout d'abord effacer les données du navigateur et réessayer
  • Quelle est la valeur de csrfmiddlewaretoken?
  • Importez-vous Django correct?
  • Assurez-vous simplement qu'il y a UserWarning dans la console, comme?
7
okm
  1. Pour 1.3 et 1.4, "Django.middleware.csrf.CsrfResponseMiddleware" doit être nommé "Django.middleware.csrf.CsrfViewMiddleware".
  2. De plus, effacer les cookies de Google Chrome m'a permis de le faire fonctionner.
3
Jason Adleberg

J'ai eu un problème similaire où mon application a été déployée sur HTTPS. J'ai dû modifier l'indicateur de réglage CSRF_COOKIE_HTTPONLY sur false pour que le serveur client puisse accéder au cookie CSRF.

0
webbyfox