为什么django-rest-framework将令牌存储在数据库中?

时间:2019-08-10 12:17:45

标签: django django-rest-framework django-rest-auth

令牌应该只存储在客户端,而不是存储在服务器端吗?

from rest_framework.authtoken.models import Token

Django-rest具有令牌模型,这意味着令牌存储在数据库中。 那么,为什么Django-rest将令牌存储在数据库中?

1 个答案:

答案 0 :(得分:1)

这取决于令牌类型

某些令牌只是一个唯一的随机字符串,而知道与哪个用户相关联的唯一方法是将其存储在某个地方,然后在需要时进行查找。

还有另一种不需要存储的令牌。基本上,您使用密钥对令牌字符串进行加密,然后将其发送给用户。

字符串必须包含您可以找到用户的某种数据。

例如,您可以创建这样的令牌字符串:userID = 2-some-random-string。然后,您使用密钥和您认为最适合您的算法对字符串进行加密,然后将其传递给用户。当您从用户那里收到令牌时,您所需要做的就是使用密钥对其进行解密,并从该字符串中提取用户ID。如果没有任何用户ID或令牌无法解密,则该令牌无效。

Django rest框架使用第一类令牌,它们需要存储在某处。

还有其他用于rest框架的库,它们可以与其他类型的令牌一起使用。您可以根据需要在所有选项中进行选择,甚至可以自己创建一个。