2010-08-15 81 views
8

我想做的事與Django的認證如下:後不正確的登錄嘗試 如何在django自定義身份驗證後端訪問請求?

  • 登錄成功登入功能的「X」號

    • 登錄不正確的登錄嘗試
    • 暫時鎖定帳戶。

    我認爲自定義auth後端將是解決方案。

    我可以做大部分我想做的事情,但我想記錄嘗試的用戶的IP和REMOTE_HOST。

    如何訪問auth後端中的請求對象?

    由於

  • 回答

    10

    的認證後端可以採取任何數目的用於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 
    

    如果你調用自己的觀點進行驗證,您可以通過請求對象不會有額外的信息。簡而言之,您必須使用自己的自定義登錄視圖。

    此外,在自動鎖定帳戶時要小心:您允許有人故意鎖定您的某個用戶帳戶(拒絕服務)。有辦法解決這個問題。此外,請確保您的不正確嘗試日誌不包含任何嘗試密碼。

    +0

    我擴展了ModelBackend - python不允許我重載方法嗎?什麼是實現這一目標的好方法?只需重命名'authenticate'方法並在我看來調用它? – Roger 2010-08-15 17:28:23

    +0

    我需要在登錄視圖中輸入什麼內容?只需複製整個當前的contrib.auth登錄視圖?我不明白,因爲該方法永遠不會調用'驗證'... – Roger 2010-08-15 20:10:47

    +0

    你肯定可以在python中重載。 'contrib.auth'要求後端有一個'authenticate'方法,所以你必須這樣稱呼它。 – 2010-08-16 00:17:47