python專案 後端自定義認證,實現多條件登陸

2022-08-20 20:48:11 字數 1498 閱讀 4260

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...