2016-11-28 7 views
0

Я не могу получить данные POST в моем django webapp в приватном просмотре сафари (он работает с Chrome incognito).CSRF не работает в django с приватным просмотром сафари

Я не использую localstorage.

Я установил X-CSRFToken заголовок с помощью

var csrftoken = NMA.getCookie('csrftoken'); 
$.ajax({ 
    type:"POST", 
    contentType: 'application/json; charset=utf-8', 
    beforeSend: function (request, settings) { 
     if (!csrfSafeMethod(settings.type) && !this.crossDomain){ 
      request.setRequestHeader("X-CSRFToken", csrftoken); 
     } 
    }, 
    url: "/profiler/logAnswers/ 
    data: payload, 
    dataType: 'json' 
}).done(... 

csrftoken печенье устанавливаются с помощью {% csrf_token%} и скрытый вход присутствует внутри <form>

Я проверил запрос, используя Чарльз и cookie csrftoken установлен, и заголовок X-CSRFToken установлен.

Я заметил, что сафари в приватном браузере добавляет «DNT = 1» (не отслеживать) в заголовок, не уверен, что это вызывает проблему. DNT = 1 отсутствует в запросах хром-инкогнито.

Я вошел печенье в

python2.7/сайт-пакеты/Джанго/промежуточного слоя/csrf.py

с использованием

logger.debug(request.COOKIES) 

и csrftoken печенье отсутствует (и несколько других файлов cookie отсутствуют). Всего напечатано только 4 файла cookie. В первоначальном запросе присутствует 13 файлов cookie, как показано в charles.

не так как нет csrftoken это приводит к тому,

Forbidden (CSRF печенье не установлен.) 403 ошибка.

Что делает DNT = 1 в заголовке? Ограничивает ли количество разрешенных куки? Предотвращает ли это некоторые типы файлов cookie?

+0

посмотри http://osxdaily.com/2012/08/21/how-to-enable-do-not-track-in -safari-6/ – itzMEonTV

+0

Я не хочу включать или отключать его. Я хочу, чтобы мой webapp работал, если пользователь использует частный режим в сафари. Кажется, что заголовок DNT изменил способ обработки django запроса. –

ответ

0

Проблема заключалась в том, что (чтобы обойти локальный ресурс не был доступен) У меня есть объекты json, сохраненные в файлах cookie. Существует питон ошибка или вопрос:

https://bugs.python.org/issue27674

, что вызывает лишь некоторые из куки, чтобы быть расшифрованы, если есть какие-либо кавычки в строке.

Так решение заменить кавычки во все печенье