2017-09-15 18 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 

あなたのために優れているそれらのどれを選択することができます。 PY

AUTHENTICATION_BACKENDS =( 'applications.accounts.auth_backends.AuthenticationBackend'、 )

+0

ちょっとナクール、パスワードを使用してotpまたは電話で電子メールとパスワードまたは電話を使用するためのコードを提供できますか? –

+0

上記のコードを編集できますか? –

+0

あなたはこの[https://stackoverflow.com/questions/6560182/django-authentication-without-a-password]を組み合わせてotp –

0

ユーザモデルを拡張するための多くの方法がありますが、ここで私はあなたにこのページを残して、あなたが設定でauthclassを指定する必要がありますについてhttps://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

+0

私はすでにカスタム・ユーザー・モデルを使用してきたが、 AbstractBaseUserを使用して、ユーザ名として電子メールを指定します。私の条件は、どのように私は電子メールまたは電話を使用して認証することができます。電子メールの場合は、認証するためのパスワードを取得するか、または電話の場合はパスワードでOTPメッセージまたは電話を送信して認証します。私はE-MAILまたはPHONE NUMBERに基づいてユーザーを認証します。 –

+0

https://stackoverflow.com/questions/31370118/multiple-username-field-in-django-user-model多分このヘルプは、あなたが必要とするものに応じてロジックを追加することができます。電話番号が確認されている場合など –

+0

上記の例は素晴らしいです。しかし、パスワードが存在しない場合に電話番号を認証する方法と、そのユーザーを認証するためにotpを送信する必要があります。この流れを解決する方法を教えてください。 –

関連する問題