"detail": "Учетные данные для аутентификации не были предоставлены." для admin
У меня есть мой токен для администратора, бронирование записей разрешено в Insomnia, но не будет разрешено отображение DRF. Я что-то упускаю, пожалуйста? Есть ли способ предоставить токен, чтобы он был разрешен?
#view.py
from django.shortcuts import render, redirect
from django.contrib.auth.models import User
from rest_framework import viewsets
from .models import Booking, Menu
from .serializers import BookingSerializer, MenuSerializer, UserSerializer
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from rest_framework import generics
from datetime import datetime
from django.views.decorators.csrf import csrf_exempt
from django.db.models import Sum
from django.contrib import messages
def home(request):
return render(request, 'index.html')
def about(request):
return render(request, 'about.html')
class UserRegistrationView(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class BookingViewSet(viewsets.ModelViewSet):
queryset = Booking.objects.all()
serializer_class = BookingSerializer
permission_classes = [IsAuthenticated]
authentication_classes = [TokenAuthentication]
settings.py
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASS': (
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication'
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
Выбираем заголовки Ключ будет Авторизация и значение будет таким
Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
Думаю, вам нужно удалить класс аутентификации session
, потому что здесь вы использовали токен для аутентификации
Я имею в виду переопределения классов аутентификации.
Итак, удалите класс аутентификации сеанса и поставьте класс аутентификации токена
Но, если вы хотите аутентифицироваться с помощью browsable, вам нужно удалить аутентификацию токена и поставить класс аутентификации сессии.
Если вы хотите аутентифицироваться с помощью токена, вам нужно использовать POSTMAN или другой сторонний инструмент тестирования API, который поддерживает аутентификацию с помощью токена. и вам нужно удалить аутентификацию сессии и поставить класс аутентификации токена
настройки для аутентификации токенов (проверьте с помощью Postman или другого стороннего инструмента тестирования API)
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASS': (
'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
настройки для аутентификации сеанса (тест с просматриваемым api, который предоставляет встроенную DRF)
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
],
'DEFAULT_AUTHENTICATION_CLASS': (
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
]
}
По моему мнению, вам следует удалить эту строку кода
'rest_framework.authentication.SessionAuthentication'
Попробуйте.