2010-12-01 34 views
2

我使用django.contrib.auth.views.login and.logout意見。非常方便,開箱即用,會再次部署AAA +等。Django的內置登錄視圖和錯誤

問題出現了,因爲我沒有使用單獨的登錄頁面,而是我在每個頁面都有一個登錄框(除非用戶已登錄, 當然)。所以,當用戶名/密碼組合錯誤時,我得到一個錯誤。 我應該選擇哪三種路徑?

  • 有一個祕密的方法可以重定向到下一個不僅在成功,而且在錯誤。如果是這樣,請告訴我!
  • 我寫我自己的登錄視圖,將使用Django的消息系統中同時
  • 我寫一個登錄頁面(當然,這只是缺少一個模板),所以我可以利用Django的身份驗證系統的全部迷死。
+0

你什麼錯誤? – 2010-12-01 17:37:30

+0

我收到一個錯誤,抱怨說沒有`registration/login.html`模板。 – Agos 2010-12-01 23:51:46

回答

3

一個可能的解決方案(第一+三選擇在您的列表):

  1. 你必須提供特殊的登錄頁面(即定義registration/login.html) 併爲用戶非loged每個正常的網頁有登錄表單;
  2. 如果用戶登錄正常(這邏輯中django.contrib.auth.views.login處理):
    • 正常頁:重定向用戶從她在loged其中頁;
    • 的登錄頁面:如果有next PARAM,重定向出現,否則重定向到主頁面;
  3. 如果用戶登錄失敗:重定向(或重畫)登錄頁面與設置錯誤;
  4. 如果用戶在loged:正常頁面提供了一個鏈接到註銷(專題頁面仍然存在的情況下,如果用戶希望的重新登錄或通過其他帳號登錄)。

在正常頁面中,登錄表單應該具有類似<input type="hidden" name="next" value="{{ request.path }}" />的內容。

在項目設置:

# in settings.py 
LOGIN_URL = '/login'  # this should coinside with url pattern of login view 
LOGOUT_URL = '/logout' # same but for logout view 
LOGIN_REDIRECT_URL = '/' # url to main page 

N.B:我不使用Django的buildin註銷觀點相反,我用我自己的:幾乎是相同的,但不僅登出了POST請求。這不允許用戶通過<img src='my_site/logout' />註銷惡意代碼。