Аутентификация JWT с помощью Django REST Framework - PullRequest
0 голосов
/ 30 ноября 2018

У меня проблемы с аутентификацией запросов к конечной точке REST Django.У меня есть URL-адрес токена, который указывает на rest_framework_jwt.views.obtain_jwt_token, например:

urlpatterns = [
    path('token-auth/', obtain_jwt_token),
    path('verify-token/', verify_jwt_token),
    path('current_user/', CurrentUserView.as_view()),
]

, где CurrentUserView:

class CurrentUserView(APIView):
    def post(self, request):
        print(request.user)
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

, если я создаю токен в браузере, посетивhttp://localhost/token-auth/, Затем я могу проверить это с помощью команды:

curl -X POST -H "Content-Type: application/json" -d '{"token":<MY_TOKEN>}' http://localhost/verify-token/

, однако тот же запрос, вызванный для http://localhost/current_user/, возвращает код 400:

curl -X POST -H "Content-Type: application/json" -d '{"token":<MY_TOKEN>}' http://localhost/current_user/

{"detail":"Authentication credentials were not provided."}

Настройки фреймворка:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

И Django запускается в контейнере со следующим Dockerfile:

FROM python:3
WORKDIR /code
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
ENV PYTHONUNBUFFERED=1
EXPOSE 8000

1 Ответ

0 голосов
/ 30 ноября 2018

Вы должны предоставить токен jwt в своих запросах.Вот пример:

curl -X POST -H "Content-Type: application/json" -H "Authorization: jwt <MY_TOKEN>" http://localhost/current_user/

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

...