如何从Django Rest Framework JWT令牌获取用户名

Gar*_*day 8 django django-rest-framework json-web-token

我正在使用Django Rest Framework,我已经包含了一个名为REST framework JWT Auth的第三方软件包.当您将用户名/密码发送到某个路由时,它会返回一个令牌.然后需要令牌才能获得某些路由的许可.但是,如何从令牌获取用户名?我查看了整个软件包文档并浏览了StackOverflow.它是一个JSON Web令牌,我假设有一个方法,username = decode_token(token)但我还没有找到这样的方法.

Arp*_*aha 7

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

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)
Run Code Online (Sandbox Code Playgroud)

  • `verifty=False` - 禁用令牌验证是不安全的,不要这样做。 (2认同)

Sar*_*iev 6

基本上你可以这样做

username = request.user.username
Run Code Online (Sandbox Code Playgroud)

  • @PrakharTrivedi 您正在回答 Python 初学者开发人员的问题。有必要写出符合python指导方针的答案,因为他会复制粘贴你的代码,他会认为这种编码风格是可以的,这不适合我们社区。 (12认同)
  • 严重地 ?@sardorbek 你为什么编辑我的代码。我正在使用驼峰式编码。真的有必要用 _ 来编码吗?没有必要。 (3认同)
  • 是的,我同意这一点。但真的有必要吗?有比这更好的事情要做。 (2认同)
  • @Addict 这可以在任何地方使用,只要传递 `request` 对象,但通常这是在视图中完成的 (2认同)

sad*_*605 5

对我来说,使用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)
Run Code Online (Sandbox Code Playgroud)

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

您可以在此处阅读分步指南:http : //blog.sadafnoor.me/blog/a-django-rest-framework-jwt-middleware-to-support-request-user/