AJAX-вызов возвращает CSRF Failed

-1

Я делаю вызов ajax в Typcript, который вызывает внутренний Web-сервис. Все конечные точки с "GET" работают, но "POST" говорит:

"403 Запрещено" - "подробнее: CSRF Ошибка: CSRF cookie не установлен"

Что я пытался решить проблему:

Ничто из этого не сработало, каждый раз по-прежнему происходит одна и та же ошибка.

Вот мой код в Typcript:

sendMessage(message, receiverId){
    let self = this;
    var message_obj = "{\"id\":\""+ GUID.generateGUID() +"\",\"message\":\""+ message +"\",\"receiverId\":\""+ receiverId + "\",\"moddate\":\""+ Date.now() +"\"}";
    var message_json = JSON.parse(message_obj);
    $.ajax({
        type: "POST",
        url: "/chat/message/",
        data:{"message_object":message_json},
        credentials: 'same-origin',
        success: function (response) {
            alert(response);
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown);
        }
    })
}

Это пример рабочего вызова ajax:

getMessages(){
    let self = this;
    $.ajax({
        type: "GET",
        url: "/chat/message/",
        dataType: "json",
        success: function (response) {
            response = JSON.stringify(response);
            alert(response);
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert(errorThrown);
        }
    })
}

РЕДАКТИРОВАТЬ:

Здесь я попытался использовать csrf_exempt:

URLS.PY

from django.conf.urls import url
from django.views.decorators.csrf import csrf_exempt

from chat_api import views

urlpatterns = [
    url(r'^message/$', csrf_exempt(views.ChatMessageAPIEndpoint.as_view())),
    url(r'^message/(?P<commit>([0-9a-fA-F])+)', csrf_exempt(views.ChatMessageAPIEndpoint.as_view())),
    url(r'^devicekey/(?P<devid>([\w+-:])+)', views.DeviceAPIEndpoint.as_view()),
    url(r'^devicekey/$', views.DeviceAPIEndpoint.as_view()),
    url(r'^contacts/$', views.ContactAPIEndpoint.as_view()),
    url(r'^read/$', views.ReadStatusEndpoint.as_view()),
]

VIEWS.PY

    @csrf_exempt
    @need_post_parameters([PARAM_MESSAGE_OBJ])
    def post(self, request, *args, **kwargs):
        data = request.POST.get(PARAM_MESSAGE_OBJ)

        try:
            message_obj = json.loads(data)
        except Exception as e:
            return HttpResponseBadRequest(error_json("Could not parse JSON"))
...
  • 0
    Покажите, как вы пытались использовать @csrf_exempt . минимальный воспроизводимый пример
  • 0
    В документации django есть пример того, как включить токен CSRF в запросы ajax с помощью jQuery.ajax() . Вы должны включить заголовок X-CSRFToken . docs.djangoproject.com/en/1.11/ref/csrf/#ajax
Показать ещё 10 комментариев
Теги:
csrf

1 ответ

0
Лучший ответ

Я нашел ошибку, и я отправлю ее здесь для равных ошибок:

Мои классы в Views.py, где используется "Oauth2APIView" ! Изменение его в "Вид" решило проблему для меня!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню