我正在使用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)
的方法,但我还没有找到这样的方法。
答案 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)