Django Rest Framework: невозможно получить идентификатор пользователя из данного токена - PullRequest
0 голосов
/ 06 декабря 2018

Я имею дело с моим первым проектом Django.Я пытаюсь создать API, который принимает токен с помощью пост-запроса и запрашивает таблицу public_authtoken_token для идентификатора соответствующего пользователя.

Я использую DBM PostgreSQL 10.6.Версия Django - 2.1.1, а DRF - 3.8.2

Вот код "view", который у меня есть:

from rest_framework.authtoken.models import Token
from rest_framework.views import APIView

class MyView(APIView):

    def post(self, request, format=None):

        my_token = request.META.get('HTTP_AUTHORIZATION')
        user_id = Token.objects.get(key=my_token).user_id
        return Response(status=status.HTTP_200_OK)

Моя проблема в том, что я получаю следующее исключение, когда делаю

user_id = Token.objects.get(key=http_token).user_id:

rest_framework.authtoken.models.Token.DoesNotExist: Token matching query does not exist.

Теперь я проверил, что токены, которые я использовал для проверки, находятся в БД и имеют действительный идентификатор_пользователя.Также я проверил, что токен, который я прочитал из HTTP-запроса, также верен.Я что-то не так делаю?

1 Ответ

0 голосов
/ 06 декабря 2018

Если вы отлаживаете и видите значение, которое вы извлекаете с помощью request.META.get('HTTP_AUTHORIZATION'), вы заметите, что это что-то вроде этого:

JWT eyJhbGciOiAiSFMyNTYiLCAidHlwIj

, что значение и префикс будут отличаться в зависимости от вашего бэкэнда аутентификации дляДжанго отдых.Но вы можете просто исправить эту ошибку с кодом ниже:

from rest_framework.authtoken.models import Token
from rest_framework.views import APIView

class MyView(APIView):

    def post(self, request, format=None):
        my_token = request.META.get('HTTP_AUTHORIZATION').split()[1]
        user_id = Token.objects.get(key=my_token).user_id
        return Response(status=status.HTTP_200_OK)
...