Пользовательская аутентификация 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)

Для остальной части вашего вопроса вы должны добавить еще некоторые детали и даже некоторые части вашего кода.

Другие вопросы по тегам