0

Я как бы новичок в django, и меня беспокоит возможность использования нескольких моделей для аутентификации для разных типов пользователей для нашего приложения, например, для клиентов, использующих модель Customer, для поставщиков, использующих модель поставщика и также сохранить модель регистрации пользователя по умолчанию для администрирования? Если это так, вы можете указать мне в правильном направлении, как это можно сделать? Какой пакет следует использовать? Существует один из способов, которым я пришел, добавив внешний ключ к каждой модели, необходимый для аутентификации, но это будет связано с объединением в каждом запросе, что может привести к проблемам с производительностью. Мне нужно знать, есть ли лучший способ. Кроме того, эти пользовательские модели могут быть полезны для всех материалов разрешений, доступных в панели администратора. Экспертное мнение будет действительно оценено.Django - использование нескольких моделей для аутентификации

+0

Это очень основано на мнениях. Я лично предпочитаю создавать модели профиля с отношениями OneToOne обратно к базовой модели пользователя. Это не единственный способ сделать это, но IMO - самый простой и модульный. – souldeux

+0

@souldeux в обширном приложении данных, это может вызвать проблемы с производительностью, поскольку оно включает в себя объединения. –

ответ

0

Существует несколько различных вариантов обработки этого. Возможно сначала проверьте the Django-docu. Я you'ld хотел, чтобы настроить его для аутентификации пользователей с помощью почтового адреса, вот пример написан knbk и rahul-gupta на бывшей документации:

аутентификации Django по умолчанию работает на имя пользователя и пароль поля. Брандмауэр аутентификации электронной почты будет аутентифицировать пользователей на основе электронной почты и пароля.

from django.contrib.auth import get_user_model 

class EmailBackend(object): 
    """ 
    Custom Email Backend to perform authentication via email 
    """ 
    def authenticate(self, username=None, password=None): 
     user_model = get_user_model() 
     try: 
      user = user_model.objects.get(email=username) 
      if user.check_password(password): # check valid password 
       return user # return user to be authenticated 
     except user_model.DoesNotExist: # no matching user exists 
      return None 

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

Добавить этот аутентификационный сервер в настройку AUTHENTICATION_BACKENDS.

# settings.py 
AUTHENTICATION_BACKENDS = (
    'my_app.backends.EmailBackend', 
    ... 
) 
+0

Я хочу использовать несколько моделей для аутентификации пользователей. Это возможно? –

+0

@ tahir есть два пути. либо вы расширяете существующую систему аутентификации, либо создаете новую. Возможно ли вам объяснить, что вы на самом деле планируете делать? –

+0

Мое приложение будет иметь три разных портала, один для администрирования, один для наших клиентов и один для наших поставщиков. Я хочу использовать отдельную систему аутентификации для каждого портала. И я хотел бы иметь возможность пользоваться системой разрешений в admin admin cPanel. Это возможно? –