2012-04-07 4 views
11

방금 ​​django를 1.4로 업데이트했습니다. 로그인 양식을 제출하려고 할 때 다음 오류가 발생합니다.Django - CSRF 토큰이 없거나 잘못되었습니다.

금지됨 (403) CSRF 확인에 실패했습니다. 요청이 중단되었습니다. 실패 이유 : CSRF 토큰이 누락되었거나 잘못되었습니다. 내 settings.py (MIDDLEWARE_CLASSES)에서

나는 그 지금 사용되지 않는 때문에 다음 줄을 제거했다 :

'django.middleware.csrf.CsrfResponseMiddleware', 

을 그리고 난이 오류를 얻을에 시작보다.

일부 필요한 정보 : 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 %} 

사람이이 문제를 해결하는 방법을 알고 있습니까?

답변

7

Django 1.3 및 1.4 auth.views.login은 RequestContext를 올바르게 사용합니다. 브라우저의

  • 첫째 데이터를 삭제하고의 값이
  • csrfmiddlewaretoken 제출 무슨
  • 당신이 올바른 장고를 가져올 마십시오
  • 다시 시도 : 확인하시기 바랍니다?
  • 콘솔에 UserWarning이 있는지 확인하십시오 : "A {% csrf_token %}이 (가) 템플릿에서 사용되었지만 컨텍스트가 값을 제공하지 않았습니다. 일반적으로 RequestContext를 사용하지 않아서 발생합니다."
+2

브라우저의 명확한 데이터로 해결됩니다. – chaim

3
  1. 는 1.3과 1.4은 "django.middleware.csrf.CsrfResponseMiddleware는"나를 위해 구글 크롬의 쿠키가 작동하게 삭제,
  2. 또한 "django.middleware.csrf.CsrfViewMiddleware"이름을 지정해야합니다.
0

내 앱이 HTTPS에 배포 된 것과 비슷한 문제가있었습니다. 클라이언트 서버가 csrf 쿠키에 액세스 할 수 있도록 플래그 CSRF_COOKIE_HTTPONLY를 false로 변경해야했습니다.

관련 문제