Django REST Framework 401 ошибка при действительных учетных данных
У меня возникла проблема, когда я отправляю POST-запрос на конечную точку api restaurant/api-token-auth
и получаю 401 ошибку с json-ответом:
{
"detail": "Invalid token."
}
Этот ответ появляется, несмотря на то, что я отправляю правильные учетные данные в POST-запросе (имя пользователя и пароль). В данном случае я попробовал использовать учетную запись администратора, и она все равно выдает такой ответ.
Вот мой код для urls.py (уровень приложения):
from django.urls import path
from . import views
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
path('home/', views.index, name='index'),
path('menu/', views.MenuItemView.as_view()),
path('menu/<int:pk>', views.SingleMenuItemView.as_view()),
path('api-token-auth/', obtain_auth_token)
]
urls.py (уровень проекта):
from django.contrib import admin
from django.urls import path, include
from rest_framework import routers
from restaurant.views import BookingViewSet
router = routers.DefaultRouter()
router.register(r'tables', BookingViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('restaurant/', include('restaurant.urls')),
path('restaurant/booking/', include(router.urls)),
path('auth/', include('djoser.urls')),
path('auth/', include('djoser.urls.authtoken')),
]
settings.py:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'restaurant',
'rest_framework',
'rest_framework.authtoken',
'djoser',
]
...(rest of code)
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES' : [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASSES' : [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}
DJOSER = {"USER_ID_FIELD" : "username"}
Я пробовал вручную создавать токены с помощью панели администратора и использовать конечную точку djoser api auth/token/login, и это работает, но таким образом - нет.
Нашел решение, код правильный, просто я отправлял токен предъявителя с учетными данными в POST-запросе вместо того, чтобы отправлять только учетные данные в Insomnia.