Django-rest-framework api разрешение AllowAny аутентификация не прошла
У меня есть несколькоViews, как показано ниже:
class SomeView(generics.ListAPIView):
serializer_class = SomeSerializer
permission_classes = [AllowAny]
settings.py:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.AllowAny',
),
...
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
...
}
Когда я запрашиваю без заголовка Authorization, он работает нормально.
Но когда я добавляю заголовок Bearer Authorization он отвечает
"detail": "Given token not valid for any token type",
"code": "token_not_valid",
Я дал permission_classes=[AllowAny].
Почему? Я думал, что нет разницы между отправкой или не отправкой tokens. Потому что я установил permission_class=[AllowAny].
В ASP.NET подобных проблем нет. В ASP.NET Если я устанавливаю разрешение AllowAny
эта конечная точка открыта для всех, независимо от того, посылаете ли вы Token или нет.
AllowAny.
Самым открытым разрешением из всех является AllowAny. Методы has_permission и has_object_permission на AllowAny всегда возвращают True, ничего не проверяя. Его использование необязательно (не задавая класс разрешения, вы неявно задаете этот класс), но все же следует, поскольку это делает намерение явным и помогает поддерживать последовательность во всем приложении
Вы указываете его, включая permission_classes в ваше представление:
from rest_framework import viewsets
from rest_framework.permissions import AllowAny
from .models import Message
from .serializers import MessageSerializer
class MessageViewSet(viewsets.ModelViewSet):
permission_classes = [AllowAny] # built-in permission class used
queryset = Message.objects.all()
serializer_class = MessageSerializer
Каждый, даже неаутентифицированные пользователи, могут получить доступ к конечной точке API, используя любой HTTP-запрос
AllowAny проверяет токен, если он отправлен, и пропускает, если его нет. Поэтому, если вам не нужна аутентификация, очистите permission_classes
permission_classes = ([])