2017-09-15 59 views
0

如何在Django中編寫自定義身份驗證後端,將場景作爲電話號碼& OTP(一次性密碼)對每個用戶進行身份驗證。Django中的自定義身份驗證後端

如何以多種條件的形式驗證每個用戶。

  1. 如果驗證電子郵件並存在密碼(使用電子郵件和密碼進行身份驗證)。
  2. 如果手機已驗證並存在(使用手機和otp進行身份驗證,或者如果存在密碼,則使用手機和密碼進行身份驗證)。

回答

1
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', )

+0

嘿Nakul,你可以提供代碼使用電子郵件和密碼或手機與otp或手機密碼。 –

+0

我已編輯上面的代碼,你可以檢查? –

+0

,你可以結合這個[https://stackoverflow.com/questions/6560182/django-authentication-without-a-password]檢查otp –

0

有很多方法來擴展用戶模型,在這裏我離開你這個頁面,你可以選擇其中哪些是你https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

+0

我已經被使用自定義的用戶模型,但使用AbstractBaseUser將電子郵件指定爲我的用戶名。我的狀況是我如何使用電子郵件或電話進行身份驗證。如果電子郵件然後獲取密碼進行身份驗證,或者如果電話然後發送otp消息或帶有密碼的電話進行身份驗證。我想根據電子郵件或電話號碼對用戶進行身份驗證。 –

+0

https://stackoverflow.com/questions/31370118/multiple-username-field-in-django-user-model也許這個幫助,當然你可以根據你需要添加更多的邏輯,例如,如果電話號碼被驗證 –

+0

上面的例子很好。但是如果密碼不存在,如何驗證電話號碼,我們必須發送otp來驗證該用戶。你能解釋我如何解決這個問題。 –

相關問題