如何知道哪个用户分配给了令牌(JWT Django rest 框架)?

How to know which user is assigned to the token (JWT Django rest framework)?

我正在尝试更新博客 API 视图,但我需要知道更新 post 的用户是否与博客的作者相同,令牌在 header 像这样的“授权持有人”我怎么知道 header 令牌的用户是否与博客 [​​=14=] 的作者相同?

这取决于使用的令牌。如果它是 JWT,您可以轻松对其进行解码并检查声明。您应该有一个 sub 声明,其中将标识用户。它可能包含用户 ID、他们的电子邮件或其他一些识别用户的信息。

使用 JWT 时,您应该记得验证它们。您可以使用我写的 jwt.io to find a library which will help you implement JWT verification. Have a look also at a JWT best practices 文章中的列表来了解使用 JWT 的陷阱。

如果您的访问令牌是不透明令牌。然后你应该使用 Token introspection 来获取分配给你的令牌的数据(发行令牌的服务器应该公开一个令牌内省端点)。

如果您不确定您的访问令牌是 JWT 格式还是不透明的,您可以转到 OAuth.tools 并在 JWT 令牌选项卡中粘贴您的访问令牌。如果是 JWT,您将在右侧看到解码后的数据。此外,JWT 是长字符串,始终由点分隔的三个部分。

每个 JWT 令牌都有一个负载和一个签名。您可以阅读更多 here。 如果您使用的是 djangorestframework-simplejwt 包,那么有效载荷将类似于 {"user_id": 1}。这就是您知道它属于哪个用户的方式。 (它以 base64 编码,因此您必须对其进行解码才能看到此信息)。

但是,您实际上不必考虑这一点,因为该程序包会为您解析令牌。因此,您只需在视图中使用 request.user 即可知道哪个用户已通过身份验证。并检查它是否与 Blog 对象中的相同,您可以这样做:

blog = Blog.objects.get(pk=1)
if request.user == blog.created_by:
    pass