如何在Django令牌验证中创建自定义令牌

时间:2020-10-27 07:51:09

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

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

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

例如,如果我们使用令牌验证创建令牌

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

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

Authorization:Token 8b000baba908hh7cf0618d492896e7b4bd6c9ce3

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

1 个答案:

答案 0 :(得分: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变量处理。