jwt擴充套件的登入檢視,在收到使用者名稱與密碼時,也是呼叫django的認證系統auth模型中提供的**authenticate()**來檢查使用者名稱與密碼是否正確。我們可以通過修改django認證系統的認證後端(主要是authenticate方法)來支援登入賬號既可以是使用者名稱也可以是手機號。
`authenticate(self, request, username=none, password=none, **kwargs)`方法的引數說明:
-request 本次認證的請求物件
-username 本次認證提供的使用者賬號
-password 本次認證提供的密碼
**我們想要讓使用者既可以以使用者名稱登入,也可以以手機號登入,那麼對於authenticate方法而言,username引數即表示使用者名稱或者手機號。**重寫authenticate方法的思路:
1. 根據username引數查詢使用者user物件,username引數可能是使用者名稱,也可能是手機號
2. 若查詢到user物件,呼叫user物件的check_password方法檢查密碼是否正確
"""實現多條件登入
"""from django.contrib.auth.backends import
modelbackend
from .models import
user
from django.db.models import
qdef
get_user_by_account(account):
"""通過賬號資訊獲取使用者
"""try
: user = user.objects.get(q(username=account) | q(mobile=account) )
except
user.doesnotexist:
user =none
return
user
class
usernamemobileauthbackend(modelbackend):
def authenticate(self, request, username=none, password=none, **kwargs): ###這個函式可以接收賬號和密碼
#獲取使用者
user =get_user_by_account(username)
#驗證密碼和是否允許登入
if user is
not none and user.check_password(password) and
self.user_can_authenticate(user):
return user
authentication_backends =['user.utils.usernamemobileauthbackend',
]#在配置檔案中進行設定,就是將自定義認證函式的位址告知django認證系統
使用者認證自定義
設定郵箱和使用者名稱和手機號均可登入 authentication backends users.views.custombackend class custombackend modelbackend 自定義使用者驗證規則 defauthenticate self,username none pa...
Shiro 自定義角色 認證
由於shiro filterchaindefinitions中 roles預設是and,user,roles system,general 比如 roles system,general 表示同時需要 system 和 general 2個角色才通過認證 所以需要自定義 繼承 authorizati...
28 自定義認證類
基於baseauthentication 沒有提供獲取user的方法 基於basejsonwebtokenauthentication 可以由authenticate credentials 獲取user auth.py 自定義認證類 from rest framework.authenticati...