Django DRF показывает требуемый метод аутентификации, соответствующий URL
Я столкнулся со странной проблемой в Django REST Framework (DRF).
# views.py
class CheckoutView(APIView):
permission_classes = [AllowAny]
def post(self, request, *args, **kwargs):
return Response({'total_price': 7879})
#url.py
urlpatterns = [
path("cart/checkout/<int:new>", checkoutView.as_view() , name="checkout"), # url 1
path("cart/checkout/", checkoutView.as_view() , name="checkout"), # url 2
]
проблема :
если я набираю url 1, то получаю ответ 200
если я нажимаю на url 2, он выдает ответ 401 { "подробно": "Учетные данные для аутентификации не были предоставлены." }
обратите внимание, что в представлении есть 'permission_classes = [AllowAny]', также у меня нет определенного класса разрешений по умолчанию в settings.py
Существует разница между аутентификацией и разрешениями. У APIView
также есть атрибут .authentication_classes
, который определяет, как проверить, вошел ли пользователь в систему. По умолчанию это BasicAuthentication
и SessionAuthentication
.
Даже если вам, таким образом, не нужно иметь никаких разрешений, он просто запустит логику аутентификации, и если в запросе есть, например, заголовок HTTP_AUTHORIZATION
, его нужно отформатировать, например, как basic username:password
.
Таким образом, вам следует посмотреть, какой заголовок аутентификации вы отправляете в представление, и, скорее всего, он не соответствует правильной структуре.