Реализация 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 на новую созданную модель пользователя. В этом случае данные аутентификации будут храниться только в одном месте - в новой таблице. Пожалуйста, ознакомьтесь со следующими документами для получения дополнительной информации о пользовательских моделях аутентификации и бэкендах

Вернуться на верх