2012-04-07 15 views
11

Sadece django'yu 1.4'e güncelledim.Django - CSRF belirteci eksik veya yanlış

Yasak (403) CSRF doğrulama başarısız: Giriş formu göndermek çalıştığınızda Ama aşağıdaki hatayı alıyorum. İstek iptal edildi. Hata için verilen neden: CSRF belirteci eksik veya yanlış. Benim settings.py (MIDDLEWARE_CLASSES) olarak

ben onun karakteri artık çünkü aşağıdaki satırı kaldırmak zorunda:

'django.middleware.csrf.CsrfResponseMiddleware', 

Ve bu hatayı almaya başladı daha.

Bazı gerekli bilgiler: 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 %} 

kimse bu sorunu çözmek için nasıl bilir mi?

cevap

7

Kod güzel görünüyor, Django 1.3 ve 1.4 auth.views.login RequestContext'i doğru kullanıyor. Tarayıcının

  • Öncelikle net veri ve değeri
  • csrfmiddlewaretoken gönderilen Neler
  • Doğru Django içe musunuz
  • tekrar deneyin: kontrol edin?
  • Konsolda UserWarning var mı ?: "A {% csrf_token%} bir şablonda kullanıldı, ancak bağlamda değer sağlanmadı. Bu genellikle RequestContext kullanılmıyor."
+2

Tarayıcı verilerini temizler bana çözer. – chaim

3
  1. 1.3 ile 1.4 için "django.middleware.csrf.CsrfResponseMiddleware" Benim için Google Chrome'un çerezleri çalışması yaptı temizleyerek,
  2. Ayrıca "django.middleware.csrf.CsrfViewMiddleware" adlı olmalıdır.
0

Uygulamamın HTTPS'de dağıtıldığı benzer bir sorun yaşadım. CSRF_COOKIE_HTTPONLY ayar bayrağı ayarını değiştirmek zorunda kaldım, böylece istemci sunucusu csrf çerezine erişebilir.