2013-07-23 59 views
0

我使用這個tutorial嘗試創建一個Django登錄應用程序(超級簡單的東西...)Django的登錄應用程序返回403禁止,CSRF問題

這是我結束了在我的模板代碼( index.html

<div id="login-box"> 
      {{ state }} 
      <form class="login-widgets" action="/login/" method="post"> 
       {% if next %} 
       <input class="login-widgets-text" type="hidden" name="next" value="{{ next }}" /> 
       {% endif %} 
       Username : 
       <input class="login-widgets-text" type="text" name="username" value="{{ username}}" /><br /> 
       Password : 
       <input type="password" name="password" value="" /><br /> 
       <input class="login-button" type="submit" value="Log In" /> 
      </form> 
      <!--<div class="login-widgets"> 
       <p>Username : ___________</p> 
       <p>Password : ___________</p> 
      </div>--> 
     </div> 

而這正是教程告訴我添加到我的應用程序views.py頁:

def login_user(request): 
    state = "Please log in below..." 
    username = password = '' 
    if request.POST: 
     username = request.POST.get('username') 
     password = request.POST.get('password') 

     user = authenticate(username=username, password=password) 
     if user is not None: 
      if user.is_active: 
       login(request, user) 
       state = "You're successfully logged in!" 
      else: 
       state = "Your account is not active, please contact the site admin." 
     else: 
      state = "Your username and/or password were incorrect." 

    return render_to_response('index.html',{'state':state, 'username': username}) 

設置我的測試數據庫正是因爲它是在教程和Django文檔所描述的,但是我的登錄保持在瀏覽器中收到此錯誤:

Forbidden (403) 
CSRF verification failed. Request aborted. 

我不明白這是什麼意思的CSRF驗證 - 在我settings.py我有設置MIDDLEWARE_CLASSES與以下內容:

MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', # Uncomment the next line for simple clickjacking protection: # 'django.middleware.clickjacking.XFrameOptionsMiddleware',)

但我不知道如何驗證CSRF和身份驗證登錄。據我所知,數據庫超級用戶和上面的代碼看起來是正確的,除了我不知道如何添加CSRF驗證。 非常感謝您的幫助!

回答

1

在您的表單中添加{% csrf_token %}。它將被一個隱藏的輸入替換爲一個鍵。

步驟documentation

概念explanation

+0

任何地方的形式? – gersande

+0

它給了我以下錯誤:'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/template/defaulttags.py:58:UserWarning:{%csrf_token%}被用在模板中,但上下文沒有提供價值。這通常是由於沒有使用RequestContext引起的。 warnings.warn(「模板中使用了{%csrf_token%},但上下文沒有提供該值,這通常是由於未使用RequestContext引起的。」) – gersande

+0

@gersande打開它後通常會寫入: '

{%csrf_token%}'。 –