如何在 Django Token Auth 中创建自定义令牌

How to create self defined token in Django Token Auth

能否在Django的Token Auth中创建一个自定义的token?

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

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

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

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

Authorization:Token 8b000baba908hh7cf0618d492896e7b4bd6c9ce3

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

如果我对你的问题理解正确,你想在许多环境(不同的服务器)中为超级用户使用相同的令牌吗?如果是这样,那么您可以尝试覆盖自动创建令牌的方法。

如何生成令牌: 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 包将其作为环境变量处理。