В django DRF с использованием JWT, почему postman правильно блокирует доступ к некоторым представлениям, но они доступны из моего Angular front-end без аутентификации?
Я пытаюсь ограничить доступ к некоторым представлениям моего API, используя Django Rest Framework и simpleJWT https://django-rest-framework-simplejwt.readthedocs.io/. Проблема, с которой я сталкиваюсь, заключается в том, что postman корректно блокирует доступ к моим представлениям, когда я не предоставляю валидный JWT для моего API, но мой Angular front-end не делает этого и предоставляет доступ ко всем представлениям моего DRF API.
{
"detail": "Authentication credentials were not provided."
}
Вот начало представления с
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
from ..serializer import General_emission_group_serializer_years
from django.db import connection
class EmmissionGroup(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request):
Вот мой файл settings.py
И мой urls.py
from django.contrib import admin
from django.urls import path, include
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
from camping.views.camping_view import CampingViewSet
from camping.views.client_view import ClientViewSet
from camping.views.adresse_view import AdresseViewSet
from rest_framework.routers import DefaultRouter
[importing views]
router = DefaultRouter()
router.register(r'client', ClientViewSet)
router.register(r'camping', CampingViewSet)
router.register(r'adresse', AdresseViewSet)
urlpatterns = [
[some path]
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('', include(router.urls))
Что вы посоветуете для решения подобной проблемы? Я пробовал postman, и работа по блокированию ограниченных просмотров, похоже, выполняется с помощью этого инструмента. Я подозреваю проблему CORS, но не уверен в этом.
Я вижу, что ваше представление на самом деле требует, чтобы JWT Token был представлен в заголовках
permission_classes = [IsAuthenticated]
Если вы хотите разрешить пользователям доступ к этой конечной точке без аутентификации, вы можете изменить это значение на
permission_classes = [AllowAny]
AllowAny
дает доступ ко всем методам (GET, POST, PUT, PATCH, HEAD и DELETE, если они реализованы) без какой-либо аутентификации.
Также вы можете использовать ReadOnly
для safe_methods
(GET и HEAD)
permission_classes = [ReadOnly || IsAuthenticated]
Примечание: || IsAuthenticated
используется для предоставления аутентифицированным пользователям доступа ко всем методам, в то время как ReadOnly запрещает это. Если у вас есть только метод get
, вы можете использовать:
permission_classes = [ReadOnly]