Должен ли я вручную сохранять ID клиента и секреты клиента? Используя django rest framework

Это мой первый проект на django rest framework и мой вопрос заключается в том, как сохранить clientID и секреты клиента вручную по сравнению с использованием пакета, который автоматизирует это.

Что я пытаюсь создать, так это нечто похожее на панель разработчика Spotify. Она дает каждому пользователю возможность создавать несколько проектов. После создания проекта пользователь получает ID клиента и секрет клиента для проекта (оба эти параметра различны для каждого проекта, создаваемого пользователем). Как и в других инструментальных панелях API, пользователи могут генерировать новый клиентский секрет.

Вот как это выглядит:

enter image description here

Моя первая попытка решить эту проблему заключалась в том, чтобы обрабатывать всю авторизацию на уровне пользователя (например, просмотр сайта с помощью панели разработчика) с помощью simple-jwt token authorization, которая сама будет обрабатывать черный список токенов и многие другие вещи.

Но для авторизации на уровне проекта я вручную сохраняю постоянный ID клиента и секрет клиента как UUID в модели проекта. Здесь вы можете увидеть модель проекта (она расширяется от базовой модели, которая включает UUID как первичный ключ + дату создания + дату изменения). Секреты клиентов из черного списка будут перемещены в пользовательскую модель черного списка, когда пользователи захотят сгенерировать новый клиентский секрет:

class Projects(Basemodel):

project_name = models.CharField(max_length=50)
user = models.ForeignKey('Users', on_delete=models.CASCADE)
project_description = models.CharField(max_length=250)
stripe_customer_id = models.CharField(max_length=40)

Sandbox = 1
Professional = 2
PROJECTTYPE_CHOICES = ((Sandbox, 'sandbox'),(Professional, 'professional'),)
development_type = models.CharField(choices=PROJECTTYPE_CHOICES, default = 'sandbox', max_length=30)

Free = 1
Per_Call = 2
Reduced_Per_Call = 3
PROJECTTYPE_CHOICES = ((Free, 'free'),(Professional, 'per_call'),(Reduced_Per_Call,'reduced_per_call'),)
payment_plan = models.CharField(choices=PROJECTTYPE_CHOICES, default = 'sandbox', max_length=30)

client_id = models.UUIDField(default=uuid.uuid4, editable=False)
client_secret = models.UUIDField(default=uuid.uuid4, editable=True)

class Meta:
    managed = True
    db_table = 'projects'
    constraints = [models.UniqueConstraint(fields=['project_name', 'user'], name='unique_projects')]

def __str__(self):
    return self.projects

Является ли такое ручное сохранение ID клиента и секретов клиента хорошей реализацией или есть пакет, который автоматизирует эти случаи?

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