#python #django #django-rest-framework #django-authentication
#python #django #django-rest-framework #django-аутентификация
Вопрос:
Можем ли мы создать самоопределяющийся токен в аутентификации токена в Django?
В настоящее время мы создаем суперпользователя и генерируем токен для этого суперпользователя. Но существует несколько сред, и мы хотим сохранить токен одинаковым для всех сред. Следовательно, необходим самоопределяющийся токен.
Например, если мы создадим токен, используя Token Auth
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
}
сначала мы создаем суперпользователя, затем создаем токен с помощью django-admin.
Authorization:Token 8b000baba908hh7cf0618d492896e7b4bd6c9ce3
Здесь я хочу определить свой собственный токен, который будет сохранен в той же таблице.
Комментарии:
1. что-то вроде JWT (?)
2. я думаю, не так, как JWT, в JWT пользователь запрашивает токен 1st. я хочу сохранить токен постоянным. я обновил описание, если это поможет. @Alviandoh
3. итак, технически, если мы «украдем» метод rest_framework Token, сгенерируем их собственный токен и сохраним его в вашей таблице. а затем создайте пользовательский сервер на основе их серверной части. Это было бы хорошо?
Ответ №1:
Если я правильно понимаю ваш вопрос, вы хотели бы иметь один и тот же токен для суперпользователя во многих средах (на разных серверах)? Если это так, то вы можете попытаться переопределить метод автоматического создания токенов.
Как сгенерировать токены: https://www.django-rest-framework.org/api-guide/authentication/#generating-tokens
Код DRF authToken https://github.com/encode/django-rest-framework/blob/master/rest_framework/authtoken/models.py
На основе приведенного выше примера кода может быть (не проверено):
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
if instance.is_superuser:
Token.objects.create(user=instance, key="superuser_key")
else:
Token.objects.create(user=instance) # use generated key
Важно, пожалуйста, не кодируйте токен жестко в коде, вы можете использовать, например, пакет python-decouple для обработки его как переменной env.