如何在Django中編寫自定義身份驗證後端,將場景作爲電話號碼& OTP(一次性密碼)對每個用戶進行身份驗證。Django中的自定義身份驗證後端
如何以多種條件的形式驗證每個用戶。
- 如果驗證電子郵件並存在密碼(使用電子郵件和密碼進行身份驗證)。
- 如果手機已驗證並存在(使用手機和otp進行身份驗證,或者如果存在密碼,則使用手機和密碼進行身份驗證)。
如何在Django中編寫自定義身份驗證後端,將場景作爲電話號碼& OTP(一次性密碼)對每個用戶進行身份驗證。Django中的自定義身份驗證後端
如何以多種條件的形式驗證每個用戶。
from django.contrib.auth import backends, get_user_model
from django.db.models import Q
class AuthenticationBackend(backends.ModelBackend):
"""
Custom authentication Backend for login using email,phone,username
with password
"""
def authenticate(self, username=None, password=None, **kwargs):
usermodel = get_user_model()
try:
user = usermodel.objects.get(
Q(username__iexact=username) | Q(email__iexact=username) | Q(phone__iexact=username)
if user.check_password(password):
return user
except usermodel.DoesNotExist:
pass
更好地爲您必須指定設置authclass。 PY
AUTHENTICATION_BACKENDS =( 'applications.accounts.auth_backends.AuthenticationBackend', )
有很多方法來擴展用戶模型,在這裏我離開你這個頁面,你可以選擇其中哪些是你https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
我已經被使用自定義的用戶模型,但使用AbstractBaseUser將電子郵件指定爲我的用戶名。我的狀況是我如何使用電子郵件或電話進行身份驗證。如果電子郵件然後獲取密碼進行身份驗證,或者如果電話然後發送otp消息或帶有密碼的電話進行身份驗證。我想根據電子郵件或電話號碼對用戶進行身份驗證。 –
https://stackoverflow.com/questions/31370118/multiple-username-field-in-django-user-model也許這個幫助,當然你可以根據你需要添加更多的邏輯,例如,如果電話號碼被驗證 –
上面的例子很好。但是如果密碼不存在,如何驗證電話號碼,我們必須發送otp來驗證該用戶。你能解釋我如何解決這個問題。 –
嘿Nakul,你可以提供代碼使用電子郵件和密碼或手機與otp或手機密碼。 –
我已編輯上面的代碼,你可以檢查? –
,你可以結合這個[https://stackoverflow.com/questions/6560182/django-authentication-without-a-password]檢查otp –