#django #django-rest-framework #django-rest-auth
Вопрос:
У меня есть приложение, в котором я реализовал django restframework, а также django reat-auth и jango framework jwt. Я следовал инструкциям, и в браузере все работает нормально. Теперь я решил проверить соединение в postman и попытаться получить данные зарегистрированного пользователя, который является конечной /rest-auth/user
точкой, но я получаю следующую ошибку
{
"detail": "Authentication credentials were not provided."
}
и я решил скопировать возвращенный токен и поместить его в заголовок URL-адреса пользователя как
"Authorization": "Token ahagjbeghq7hbcvgqhvwqu08hevug.jwhhwiiwhw",
"Content-Type": "application/json; charset=utf-8"
после изменения заголовка с помощью возвращенного токена я ожидал, что в нем будут отображаться данные пользователя, но вместо этого я все равно получил
{
"detail": "Authentication credentials were not provided."
}
но я могу проверить правильность токена по URL-адресу, предоставленному jwt restframework
/api-token-verify
что возвращает значение токена обратно. это мои классы аутентификации django rest
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
),
}
Ответ №1:
Вы должны использовать JWT
вместо Token
внутреннего Authorization
заголовка для токена jwt:
"Authorization: JWT <your_token>"
Комментарии:
1. он запросил, чтобы я ввел имя пользователя
2. @Король, я имею в виду, что ты должен сделать
"Authorization": "JWT ahagjbeghq7hbcvgqhvwqu08hevug.jwhhwiiwhw",
Ответ №2:
Как уже упоминал @ JWT
neverwalkaloner, ключевое слово предполагает значение авторизации в разделе заголовка Postman. Документы
Кроме того, если вы не хотите, чтобы JWT в качестве ключевого слова входил в ваш токен, вы можете настроить его в своих настройках: с помощью следующего ключа: JWT_AUTH_HEADER_PREFIX
JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_SECRET_KEY': settings.SECRET_KEY,
'JWT_GET_USER_SECRET_KEY': None,
'JWT_PUBLIC_KEY': None,
'JWT_PRIVATE_KEY': None,
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_LEEWAY': 0,
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_AUDIENCE': None,
'JWT_ISSUER': None,
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'Bearer', #this most commonly accepted way
'JWT_AUTH_COOKIE': None,
}