Я как бы новичок в django, и меня беспокоит возможность использования нескольких моделей для аутентификации для разных типов пользователей для нашего приложения, например, для клиентов, использующих модель Customer, для поставщиков, использующих модель поставщика и также сохранить модель регистрации пользователя по умолчанию для администрирования? Если это так, вы можете указать мне в правильном направлении, как это можно сделать? Какой пакет следует использовать? Существует один из способов, которым я пришел, добавив внешний ключ к каждой модели, необходимый для аутентификации, но это будет связано с объединением в каждом запросе, что может привести к проблемам с производительностью. Мне нужно знать, есть ли лучший способ. Кроме того, эти пользовательские модели могут быть полезны для всех материалов разрешений, доступных в панели администратора. Экспертное мнение будет действительно оценено.Django - использование нескольких моделей для аутентификации
ответ
Существует несколько различных вариантов обработки этого. Возможно сначала проверьте 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', ... )
Я хочу использовать несколько моделей для аутентификации пользователей. Это возможно? –
@ tahir есть два пути. либо вы расширяете существующую систему аутентификации, либо создаете новую. Возможно ли вам объяснить, что вы на самом деле планируете делать? –
Мое приложение будет иметь три разных портала, один для администрирования, один для наших клиентов и один для наших поставщиков. Я хочу использовать отдельную систему аутентификации для каждого портала. И я хотел бы иметь возможность пользоваться системой разрешений в admin admin cPanel. Это возможно? –
Это очень основано на мнениях. Я лично предпочитаю создавать модели профиля с отношениями OneToOne обратно к базовой модели пользователя. Это не единственный способ сделать это, но IMO - самый простой и модульный. – souldeux
@souldeux в обширном приложении данных, это может вызвать проблемы с производительностью, поскольку оно включает в себя объединения. –