Должен ли я вручную сохранять ID клиента и секреты клиента? Используя django rest framework
Это мой первый проект на django rest framework и мой вопрос заключается в том, как сохранить clientID и секреты клиента вручную по сравнению с использованием пакета, который автоматизирует это.
Что я пытаюсь создать, так это нечто похожее на панель разработчика Spotify. Она дает каждому пользователю возможность создавать несколько проектов. После создания проекта пользователь получает ID клиента и секрет клиента для проекта (оба эти параметра различны для каждого проекта, создаваемого пользователем). Как и в других инструментальных панелях API, пользователи могут генерировать новый клиентский секрет.
Вот как это выглядит:
Моя первая попытка решить эту проблему заключалась в том, чтобы обрабатывать всю авторизацию на уровне пользователя (например, просмотр сайта с помощью панели разработчика) с помощью 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 клиента и секретов клиента хорошей реализацией или есть пакет, который автоматизирует эти случаи?