Реализация Django REST TokenAuthentication для многопользовательской модели
Мне нужно реализовать TokenAuthentication
с использованием пользовательской модели пользователя Consumer
& Merchant
(модель по умолчанию User
все еще существует и используется для входа администратора).
Я искал в официальной документации DRF и несколько дней искал в google, но я не могу найти никакой подробной ссылки о том, как этого добиться, все ссылки, которые я нашел, используют модели User по умолчанию или extended User.
class Consumer(models.Model):
consumer_id = models.AutoField(primary_key=True)
token = models.UUIDField(default=uuid.uuid4)
email = models.CharField(max_length=100, unique=True, null=True)
password = models.CharField(max_length=500, default=uuid.uuid4)
class Merchant(models.Model):
merchant_id = models.AutoField(primary_key=True)
token = models.UUIDField(default=uuid.uuid4)
email = models.CharField(max_length=100, unique=True)
name = models.CharField(max_length=100)
password = models.CharField(max_length=500, default=uuid.uuid4)
Settings.py
INSTALLED_APPS = [
...
'rest_framework',
...
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser'
]
}
Я также использую декоратор @api_view
с представлениями, основанными на функциях:
@api_view(['POST'])
@renderer_classes([JSONRenderer])
def inbound_product(request, pid):
product = MerchantProduct.objects.get(product_id=pid)
Рекомендуется хранить данные аутентификации только в одной таблице, даже если у вас есть несколько таблиц профилей пользователей. Поэтому в вашем случае, я думаю, вам нужно иметь еще одну таблицу для аутентификации пользователей, таблица должна реализовать AbstractBaseUser. И должна быть ссылка OneToOne между таблицами merchant и customer на новую созданную модель пользователя. В этом случае данные аутентификации будут храниться только в одном месте - в новой таблице. Пожалуйста, ознакомьтесь со следующими документами для получения дополнительной информации о пользовательских моделях аутентификации и бэкендах