2016-06-20 11 views
0

私のプロジェクトでは、個人属性のユーザーと企業タイプのユーザーを作成する必要があります。私は別のモデルでそれらを作成することができますが、私は両方の認証システムで同時に実装することはできません?それが可能なのだろうか?Django 2モデル1認証システム

+0

両方のモデルで 'AbstractUser'を継承するのはどうですか? – ravigadila

+0

@RaviKumarあなたが言ったようなユーザーを作成することはできますが、settings.pyで私はどのモデルを私が認証に使用したかを選択する必要があります – ihsancemil

+1

私はこれを望んでいます[リンク1](http://stackoverflow.com/questions/30495979/django-1 -8-multiple-custom-user-types)と[link 2](http://stackoverflow.com/questions/19253842/whats-the-properway-to-use-multiple-auth-user-model-in -django-1-5)を使って開始することができます。 @RaviKumarありがとうございます。 – ravigadila

答えて

0

django docsに記載されているように、独自のAUTHENTICATION_BACKENDSを書くことができます。たとえば :

class UserProfileModelBackend(ModelBackend): 
    def authenticate(self, username=None, password=None): 
     try: 
      user = self.user_class.objects.get(username=username) 
      if user.check_password(password): 
       return user 
     except self.user_class.DoesNotExist: 
      return None 

    def get_user(self, user_id): 
     try: 
      return self.user_class.objects.get(pk=user_id) 
     except self.user_class.DoesNotExist: 
      return None 

    @property 
    def user_class(self): 
     if not hasattr(self, '_user_class'): 
      self._user_class = apps.get_model(*settings.AUTH_USER_MODEL.split('.', 2)) 
      if not self._user_class: 
       raise ImproperlyConfigured('Could not get custom user model') 
     return self._user_class 

そしてAUTHENTICATION_BACKENDS settings.pyででこのAUTH-バックエンドを追加します。誰かがdjango.contrib.auth.authenticateを呼び出すと詳細について がWriting an authentication backend

()を参照してくださいDjangoはその認証バックエンドのすべてにわたって認証しようとします。最初の認証方法が失敗した場合、Djangoはすべてのバックエンドが試行されるまで2番目の認証方法を試します。

AUTHENTICATION_BACKENDSの順番に、その同じユーザ名とパスワードが複数のバックエンドで有効である場合、Djangoは最初の正の一致の処理を停止します。

は注意してください。

関連する問題