Как мне заставить Rails 3.1 не добавлять X-CSRF-Token в мои JSONP-запросы, которые отправляются третьим лицам? - PullRequest
1 голос
/ 18 мая 2011

Я использую стороннюю клиентскую библиотеку JavaScript, которая использует jQuery для отправки запросов JSONP. Запросы помечаются X-CSRF-Token, но Google Chrome блокирует их, сообщая

XMLHttpRequest cannot load [...]. Request header field X-CSRF-Token is not allowed by Access-Control-Allow-Headers.

Как мне заставить Rails 3.1 не добавлять X-CSRF-Token в мои запросы, отправляемые третьей стороне?

1 Ответ

2 голосов
/ 09 августа 2011

У меня просто была эта проблема.Эта ошибка фактически исправлена ​​в текущей версии jquery-rails для разработки.

То, что происходит там, происходит из-за функции CSRFProtect помощников rails, которая добавляет этот заголовок к каждому запросу ajaxно это не имеет смысла для междоменной области.Начиная с jQuery 1.5, вы можете добавить опцию crossDomain в конфигурацию ajax, чтобы запросы считались междоменными, а текущая версия jquery-rails исправляет это здесь .

Теперь есть два способа установить параметр crossDomain:

  • Если вы создаете форму или ссылку, вы можете добавить соответственно :html => {'data-cross-domain' => true} или 'data-cross-domain' => true (ср. источник )
  • Если вы используете функцию raw $.ajax, просто не забудьте добавить crossDomain: true к опциям.

TL; DR обновите jquery_rails до последней версии (то есть до текущей версии dev в github) и запомните параметр crossDomain.

...