2016-06-20 3 views
0

В моем проекте я должен создать пользовательский тип пользователя и тип компании, у которых есть разные атрибуты. Я могу создать их с разными моделями, но я не могу одновременно реализовать их в системе auth? Интересно, возможно ли это?Система проверки подлинности Django 2 model 1

+0

Что касается наследования 'AbstractUser' в обеих моделях? – ravigadila

+0

@RaviKumar Я могу создать таких пользователей, как вы сказали, но в settings.py Мне нужно выбрать, какую модель я использовал для auth – ihsancemil

+1

Я надеюсь, что это [ссылка 1] (http://stackoverflow.com/questions/30495979/django-1 -8-multiple-custom-user-types) и [ссылка 2] (http://stackoverflow.com/questions/19253842/whats-the-proper-way-to-use-multiple-auth-user-model-in -django-1-5) может помочь вам начать. – 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. Для получения дополнительной информации см Writing an authentication backend

Когда кто-то звонит django.contrib.auth.authenticate() Джанго пытается аутентичности во всех своих движков аутентификации. Если первый метод аутентификации не удался, Django пытается выполнить второй и т. Д., Пока не будут предприняты попытки всех бэкэнд.

Будьте осторожны:

Порядок вопросов AUTHENTICATION_BACKENDS, поэтому, если же имя пользователя и пароль действителен в нескольких движков, Django остановит обработку на первом положительном матче.

Смежные вопросы