У меня проблема с отправкой / получением каких-либо запросов после входа в JWT.(Я использую библиотеку djangorestframework-jwt ) Пользователь успешно входит в систему, приложение возвращает токен json, но когда я использую этот токен для следующих запросов, я получаю
{
"detail": "Authentication credentials were not provided."
}
settings.py
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
JWT_AUTH = {
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=1),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}
Представление входа в систему
def post(self, request, format=None):
if not request.data:
return Response({'Error': "Please provide username/password"}, status=status.HTTP_400_BAD_REQUEST)
username = request.data['username']
password = request.data['password']
try:
user = User.objects.get(email=username, password=password)
except User.DoesNotExist:
return Response({'Error': "Invalid username/password"}, status=status.HTTP_400_BAD_REQUEST)
if user:
payload = {
'id': user.id,
'email': user.email,
'first_name': user.first_name
}
jwt_token = jwt.encode(payload, "SECRET_KEY") # to be changed
return Response({'token': jwt_token}, status=status.HTTP_200_OK)
, а затем все остальные представления содержат
authentication_class = (JSONWebTokenAuthentication,)
permission_classes = (IsAuthenticated,)
IЯ проверил как с почтальоном, так и с curl, но получаю ту же ошибку.Не уверен, если есть ошибка с форматом заголовка или есть что-то еще, что я пропускаю.Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: я изменил свои настройки на
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
, но теперь я получаю это
{
"detail": "Error decoding signature."
}
РЕДАКТИРОВАТЬ: Я думаю, проблема в том, что jwt_token = jwt.encode(payload, 'SECRET_KEY')
может вернуть токен, который не распознан ... если я использую токен, сгенерированный obtain_jwt_token
, тогда я могу запросить любую конечную точку.Кто-нибудь может объяснить это?
РЕДАКТИРОВАТЬ: поэтому я изменил на jwt_token = jwt_encode_handler(payload)
, и файл настроек содержит JWT_SECRET_KEY
(когда я проверяю токен, который получаю после входа в систему на jwt, это действительно правильный токен с правильной полезной нагрузкой и секретом)но это все еще не распознано "detail": "Invalid signature."