Пользовательская аутентификация Django
У меня есть модель с именем Customers(имя пользователя, пароль.. и т. Д.), А также модель с именем User (имя пользователя, пароль... и т. Д.).
Я хочу создать два разных API с разной аутентификацией.
Нужно пройти аутентификацию с именем пользователя, паролем
а второй должен аутентифицироваться, используя имя пользователя, пароль Клиента.
Любая идея о том, как я могу это сделать?
Спасибо!
2 ответа
Я предлагаю следующие варианты:
1.
Я предполагаю, что Модель пользователя - это "реальный" пользователь вашего приложения. Если это так, используйте класс модели пользователя по умолчанию в django. Это будет работать из коробки.
Для модели Customer сделайте ее наследницей от AbstractBaseUser, это даст вам функциональность пароля из коробки, и вы сможете добавлять другие поля в соответствии с вашими потребностями.
Теперь вы можете создать 2 разных URL для входа в систему. 1 URL для пользователя, который проверяет модель User, а другой для модели Customer. Это позволяет избежать путаницы для всех.
Если вы предпочитаете один URL, вы должны указать класс модели вместе с именем пользователя и паролем, чтобы узнать, в какой таблице их проверять.
2.
Создайте две модели профиля: UserProfile и CustomerProfile
Каждый из них будет иметь отношение один к одному с моделью пользователя по умолчанию в django.
По сути, пользователь может иметь профиль "реального" пользователя или клиента.
В этом случае, когда вы создаете любого пользователя, вы должны проверить, хотите ли вы присоединить UserProfile или CustomerProfile.
В этом случае имеет смысл просто использовать один URL-адрес для входа. Из информации для входа в систему пользователя вы можете сначала получить пользователя из таблицы User, а затем проверить, является ли он клиентом, запустив запрос в таблице CustomerProfile.
Я рекомендую вам использовать django.contrib.auth.user
класс для вашей классической аутентификации. Вы можете либо наследовать от этого класса, либо добавить отношение OneToOne к своей собственной модели следующим образом
from django.contrib.auth.models import User
class YourUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
Для остальной части вашего вопроса вы должны добавить еще некоторые детали и даже некоторые части вашего кода.