【问题标题】:How to create self defined token in Django Token Auth如何在 Django Token Auth 中创建自定义令牌
【发布时间】:2021-02-09 11:26:34
【问题描述】:

我们可以在 Django 的 Token Auth 中创建自定义令牌吗?

目前,我们正在创建一个超级用户并为该超级用户生成一个令牌。但是有几个环境,我们希望在所有环境中保持令牌相同。因此,需要一个自定义令牌。

例如,如果我们使用 Token Auth 创建令牌

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
}

我们首先创建一个超级用户,然后我们使用 django-admin 创建一个令牌。

Authorization:Token 8b000baba908hh7cf0618d492896e7b4bd6c9ce3

在这里,我想定义我自己的令牌,它将保存在同一个表中。

【问题讨论】:

  • 类似 JWT (?)
  • 我猜不像 JWT,在 JWT 用户请求令牌 1st。我想永久保留令牌。我已经更新了描述,如果有帮助的话。 @Alviandoh
  • 所以从技术上讲,如果我们“窃取”rest_framework Token 的方法生成自己的令牌,并将其保存在您的表中。然后根据他们的后端创建自定义后端。会好吗?

标签: python django django-rest-framework django-authentication


【解决方案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 

重要请不要在代码中硬编码token,你可以使用例如python-decouple包来处理它作为环境变量。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2020-04-20
    • 1970-01-01
    • 2020-03-03
    • 2021-11-17
    • 2021-11-07
    相关资源
    最近更新 更多