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

时间:2016-10-03 01:18:44

标签: django django-rest-framework json-web-token

我正在使用Django Rest Framework,我已经加入了名为REST framework JWT Auth的第三方软件包。当您将用户名/密码发送到某个路由时,它会返回一个令牌。然后需要令牌才能获得某些路由的许可。但是,如何从令牌获取用户名?我查看了整个软件包文档并浏览了StackOverflow。它是一个JSON Web令牌,我假设有一个类似(define (comp f g) (f g)) (define (complement f) (lambda (g) (cond ((comp f g) #t) (else #f)))) ((complement odd?) 2) 的方法,但我还没有找到这样的方法。

3 个答案:

答案 0 :(得分: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)

或者您可以编写一个基于其令牌设置用户的中间件。

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

答案 1 :(得分:3)

基本上你可以这样做

username = request.user.username

答案 2 :(得分:0)

对我来说,不再像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)
相关问题