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

Why django-rest-framework stores token in database?

token是不是应该只存储在客户端而不是服务器端?

from rest_framework.authtoken.models import Token

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

这取决于令牌类型

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

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

该字符串必须包含某种数据,您可以通过这些数据找到用户。

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

Django rest 框架使用第一种令牌,它们需要存储在某个地方。

还有其他适用于其他类型令牌的休息框架库。您可以根据自己的需要在所有这些中进行选择,甚至可以自己创建一个。