【问题标题】:How to get username from Django Rest Framework JWT token如何从 Django Rest Framework JWT 令牌中获取用户名
【发布时间】:2017-02-10 21:52:39
【问题描述】:

我正在使用 Django Rest Framework,并且包含一个名为 REST framework JWT Auth 的第三方包。当您将用户名/密码发送到某个路由时,它会返回一个令牌。然后需要令牌来获得某些路由的权限。但是,如何从令牌中获取用户名?我已经查看了所有的包文档并通过了 StackOverflow。这是一个 JSON Web Token,我假设有一个类似 username = decode_token(token) 的方法,但我还没有找到这样的方法。

【问题讨论】:

  • 您在请求中有用户对象。或者你没有这样做?
  • 我正在这样做,但我是 Django 新手,所以我不完全理解它是如何工作的。你能详细说明一下吗?
  • 添加您的查看代码

标签: django django-rest-framework jwt


【解决方案1】:

对我来说,这是因为 RestFrameworkJWT 不再维护。 所以我使用了rest_framework_simplejwt 包。

from rest_framework_simplejwt.backends import TokenBackend
token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
data = {'token': token}
   try:
      valid_data = TokenBackend(algorithm='HS256').decode(token,verify=False)
      user = valid_data['user']
      request.user = user
   except ValidationError as v:
      print("validation error", v)

【讨论】:

    【解决方案2】:

    对于我来说,Django (2.0.1)、djangorestframework (3.7.7)、djangorestframework-jwt (1.11.0)。

    我必须执行以下操作才能从令牌中找回我的使用用户:

            token = request.META.get('HTTP_AUTHORIZATION', " ").split(' ')[1]
            print(token)
            data = {'token': token}
            try:
                valid_data = VerifyJSONWebTokenSerializer().validate(data)
                user = valid_data['user']
                request.user = user
            except ValidationError as v:
                print("validation error", v)
    

    或者您可以编写一个中间件,根据用户的令牌设置用户。

    【讨论】:

    • 我遇到错误你能分享你的整个中间件文件吗
    • 对不起,这不是用户要求的。但是你可以访问这个链接,它有完整的中间件。
    【解决方案3】:

    基本上你可以这样做

    username = request.user.username
    

    【讨论】:

    • 认真的吗? @sardorbek 你为什么编辑我的代码。我正在使用 Camel Case 类型的编码。真的有必要用 _ 编码吗?没有必要。
    • @PrakharTrivedi 阅读 pep8 指导方针 python.org/dev/peps/pep-0008。这是python社区的约定
    • 是的,我同意这一点。但是真的有必要吗?还有比这更好的事情要做。
    • @PrakharTrivedi 您正在回答初学者 python 开发人员的问题。一定要写符合python指导的答案,因为他会复制粘贴你的代码,他会认为这种编码风格是可以的,这不适合我们社区。​​span>
    • @Addict this 可以在任何地方使用,其中传递了request 对象,但通常这是在视图中完成的
    猜你喜欢
    • 2022-10-06
    • 2019-07-23
    • 2019-08-01
    • 2019-06-20
    • 2018-02-24
    • 2017-06-25
    • 2019-05-08
    • 2017-03-30
    • 2020-05-05
    相关资源
    最近更新 更多