【问题标题】:How can I use JWT tokens in Django Rest Framework?如何在 Django Rest Framework 中使用 JWT 令牌?
【发布时间】:2019-06-20 02:09:33
【问题描述】:

我是 django 和 DRF 的新手,我正在尝试使用 JWT 构建一个身份验证系统,我想在注册后直接登录用户,我阅读了文档并设法手动创建了一个令牌并将其返回我的序列化程序,但我的问题是:

1) 如何使用此令牌查看用户是否登录?

2) 我可以在模板中使用 {% if user.is_authenticated %} 吗?如果有怎么办?

3) 如何在另一个视图中获取用户登录信息?

4) 有没有更有效的方法来处理 DRF 的身份验证?

【问题讨论】:

    标签: django django-rest-framework django-rest-framework-jwt


    【解决方案1】:

    1- 基本上,当您使用 DRF 和 jwt 令牌时,意味着您正在使用基于令牌的身份验证,因此您的所有请求都应包含 Authorization: basic <token value> 的 http 标头。所以 django drf 认证后端,会识别这个令牌,如果有效,用户将被认证。

    2- 我认为你不能再使用那个模板标签了。因为那是基于会话的身份验证。

    3- 如果您提供支持该令牌的身份验证并在标头中发送令牌,则每个视图都应在 request.user 中包含用户信息

    4- 我认为最好的解决方案之一是基于令牌的 jwt 令牌。

    【讨论】:

    • 对不起,我是新手,如何添加 http 标头?以及如何在不同的请求中获取用户的令牌?我应该手动重新创建令牌吗?
    • 不只是在您的请求中从 UI 发送它。只需在您的 javascript 代码中添加一个标头,其值为 Authorization: basic <token>
    • 例如,您可以使用以下 curl 命令对其进行测试:http http://127.0.0.1:8000/hello/ 'Authorization: Token <token here>'
    • 哦,我明白了,非常感谢,但是我怎样才能使用 jwt 注销用户?
    • 您不能销毁 jwt 令牌。但您可以通过从 localStorage 或 Cookie 中删除来将其从 UI 中删除。但是 jwt 令牌在过期之前都是有效的。
    【解决方案2】:

    DRF Auth and Permissions 提供了很多关于在 DRF 中使用身份验证和权限的有用信息,请查看。

    补充@Reza-Torkaman-Ahmadi 所说的话:

    在您的视图中,您可以使用权限来确保用户已通过身份验证:

    permission_classes = (permissions.IsAuthenticatedOrReadOnly,) 
    

    【讨论】:

      猜你喜欢
      • 2019-08-01
      • 2017-06-25
      • 2017-03-30
      • 2019-02-26
      • 2017-02-10
      • 2020-06-18
      • 2017-05-28
      • 2016-08-24
      • 2022-10-06
      相关资源
      最近更新 更多