2012-04-07 54 views
11

Acabo de actualizar mi django a 1.4. Pero estoy consiguiendo el error siguiente cuando intento enviar mi formulario de acceso:Django - CSRF token falta o es incorrecto

prohibida (403) verificación CSRF falló. Solicitud abortada Motivo proporcionado para el error: CSRF token falta o es incorrecto.

En mi settings.py (MIDDLEWARE_CLASSES) que tenía que quitar la línea siguiente ya que su obsoleto:

'django.middleware.csrf.CsrfResponseMiddleware', 

Y que empecé a conseguir este error.

Parte de la información necesaria: 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 %} 

¿Alguien sabe cómo solucionar este problema?

Respuesta

7

El código se ve bien, Django 1.3 y 1.4 auth.views.login usa RequestContext correctamente. Por favor marque:

  • de datos En primer lugar claras de navegador y vuelva a intentarlo
  • Cuál es el valor de presentarse csrfmiddlewaretoken
  • hacer negocios de importación que Django correcta?
  • Solo asegúrese, ¿hay UserWarning en la consola como ?: "Se utilizó una {% csrf_token%} en una plantilla, pero el contexto no proporcionó el valor. Esto generalmente se debe a que no se usa RequestContext."
+2

Borrar datos del navegador me lo resuelve. – chaim

3
  1. Para 1.3 y 1.4, "django.middleware.csrf.CsrfResponseMiddleware" debería llamarse "django.middleware.csrf.CsrfViewMiddleware"
  2. Además, para mí eliminar las cookies de Google Chrome hizo el trabajo.
0

Tuve un problema similar cuando mi aplicación se implementó en HTTPS. Tuve que cambiar el indicador de configuración CSRF_COOKIE_HTTPONLY a falso para que el servidor del cliente pueda acceder a la cookie csrf.