8
我想做的事與Django的認證如下:後不正確的登錄嘗試 如何在django自定義身份驗證後端訪問請求?
- 登錄不正確的登錄嘗試
- 暫時鎖定帳戶。
我認爲自定義auth後端將是解決方案。
我可以做大部分我想做的事情,但我想記錄嘗試的用戶的IP和REMOTE_HOST。
如何訪問auth後端中的請求對象?
由於
我想做的事與Django的認證如下:後不正確的登錄嘗試 如何在django自定義身份驗證後端訪問請求?
我認爲自定義auth後端將是解決方案。
我可以做大部分我想做的事情,但我想記錄嘗試的用戶的IP和REMOTE_HOST。
如何訪問auth後端中的請求對象?
由於
的認證後端可以採取任何數目的用於authenticate()
方法自定義參數。例如:如果你使用Django的登錄視圖(或管理員登錄)
from django.contrib.auth import authenticate
def login(request):
# discover username and password
authenticate(username=username, password=password, request=request)
# continue as normal
,您:
class MyBackend:
def authenticate(self, username=None, password=None, request=None):
# check username, password
if request is not None:
# log values from request object
如果你調用自己的觀點進行驗證,您可以通過請求對象不會有額外的信息。簡而言之,您必須使用自己的自定義登錄視圖。
此外,在自動鎖定帳戶時要小心:您允許有人故意鎖定您的某個用戶帳戶(拒絕服務)。有辦法解決這個問題。此外,請確保您的不正確嘗試日誌不包含任何嘗試密碼。
我擴展了ModelBackend - python不允許我重載方法嗎?什麼是實現這一目標的好方法?只需重命名'authenticate'方法並在我看來調用它? – Roger 2010-08-15 17:28:23
我需要在登錄視圖中輸入什麼內容?只需複製整個當前的contrib.auth登錄視圖?我不明白,因爲該方法永遠不會調用'驗證'... – Roger 2010-08-15 20:10:47
你肯定可以在python中重載。 'contrib.auth'要求後端有一個'authenticate'方法,所以你必須這樣稱呼它。 – 2010-08-16 00:17:47