7

我正在为 REST API 使用django-rest-framework。此外,对于 JSON Web 令牌身份验证,我正在使用django-rest-framework-jwt。成功登录后,用户将获得一个令牌。我已经找到了如何使用 api 调用验证令牌,但是有没有办法在视图中验证令牌并获取该令牌的用户,类似于 request.user?

使用django-channels时,我需要它在消费者内部进行验证:

def ws_connect(message):
    params = parse_qs(message.content["query_string"])
    if b"token" in params:
        token = params[b"token"][0]

    # validate the token and get the user object

    # create an object with that user
4

2 回答 2

21

我正要验证令牌并通过导入 VerifyJSONWebTokenSerializer 类来获取用户。

from rest_framework_jwt.serializers import VerifyJSONWebTokenSerializer

data = {'token': token}
valid_data = VerifyJSONWebTokenSerializer().validate(data)
user = valid_data['user']

希望这对像我这样的任何人都有帮助。

于 2017-09-16T18:45:17.077 回答
6

使用TokenBackend代替VerifyJSONWebTokenSerializer

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)
于 2020-10-26T10:25:58.710 回答