django 自定義身份認證


自定義身份認證:

Django 自帶的認證系統足夠應付大多數情況,但你或許不打算使用現成的認證系統。定制自己的項目的權限系統需要了解哪些一些關鍵點,即Django中哪些部分是能夠擴展或替換的。這個文檔提供了如何定制權限系統的細節。
“認證”后端 在以下情形時可被擴展:當一個 User 模型對象帶有用戶名和密碼時,且需要有別於 Django 默認的認證功能。
你可為你的模型提供可通過 Django 權限系統檢查的 定制的權限。
你能夠擴展 默認的 User 模型,或實現 一個完全定制的模型。

指定認證后端:

在底層,Django 維護一個“認證后台”的列表。當調用django.contrib.auth.authenticate() 時 —— 如何登入一個用戶 中所描述的 —— Django 會嘗試所有的認證后台進行認證。如果第一個認證方法失敗,Django 將嘗試第二個,以此類推,直至試完所有的認證后台。
使用的認證后台通過AUTHENTICATION_BACKENDS 設置指定。它應該是一個包含Python 路徑名稱的元組,它們指向的Python 類知道如何進行驗證。這些類可以位於Python 路徑上任何地方。
默認情況下,AUTHENTICATION_BACKENDS 設置為:

('django.contrib.auth.backends.ModelBackend',)

這個基本的認證后台會檢查Django 的用戶數據庫並查詢內建的權限。它不會通過任何的速率限制機制防護暴力破解。你可以在自定義的認證后端中實現自己的速率控制機制,或者使用大部分Web 服務器提供的機制。
AUTHENTICATION_BACKENDS 的順序很重要,所以如果用戶名和密碼在多個后台中都是合法的,Django 將在第一個匹配成功后停止處理。
如果后台引發PermissionDenied 異常,認證將立即失敗。Django 不會檢查后面的認證后台。

編寫認證后端:

繼承django.contrib.auth.backends.ModelBackend后實現authenticate方法即可。

實例:

class CustomBackend(ModelBackend):
    """
    自定義用戶驗證
    """
    def authenticate(self, username=None, password=None, **kwargs):
        try:
            user = User.objects.get(Q(username=username)|Q(mobile=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

settings.py

AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM