CSRF - Referer при выполнении ajax-запроса из расширения Chrome с помощью Django Backend

Я использую последние версии Django и Django Rest Framework. Мое веб-приложение предоставляет API, который в настоящее время используется только внешним интерфейсом.

Я нахожусь в процессе создания расширения Chrome, используя те же маршруты API.

Когда я использую команду локального сервера runserver, у меня нет проблем. Когда сервер работает за HTTPS, у меня постоянно 403 ошибки.

{"detail":"CSRF Failed: Referer checking failed - no Referer."}

Я использовал следующее представление:

@method_decorator(csrf_exempt, name='dispatch')
class ObtainAuthToken(APIView):
    permission_classes = (AllowAny,) #maybe not needed in your case

    def post(self, request):
        username = request.POST['username'].lower()
        password = request.POST['password']
        user = authenticate(username=username, password=password)

        payload = dict()

        if user is not None:

            token, created = Token.objects.get_or_create(user=user)

            payload['token'] = token.key
            payload ["success"] = True

        else:
            payload['error'] = "Credentials not valid or user inactive"
            payload ["success"] = False

        payload["operation"] = "Obtain Authentication Token"
        payload ["timestamp"] = get_timestamp()
        return Response(payload)

AJAX Call является следующим:

$.ajax({
            url: endpoint + "api/1.0/get_auth_token/",
            type: 'POST',
            // Fetch the stored token from localStorage and set in the header
            data: formData,
            dataType: "json",
            mimeType: "multipart/form-data",
            contentType: false,
            cache: false,
            processData:false,
            xhrFields: {
              withCredentials: false
            },
            headers: {
                 'Cache-Control': 'no-cache'
            },
            beforeSend: function(xhr) {
                xhr.setRequestHeader('X-CSRFToken', csrf_val);
            },
            success: function(response){
                console.log(response);
            }
 });

Странная вещь, это прекрасно работает в любой ситуации, когда я использую Почтальон. Я установил одинаковые заголовки и все еще не могу заставить их работать.

Спасибо за вашу помощь

0 ответов

Другие вопросы по тегам