2015-01-14 2 views
0

У меня есть приложение rails и api, работающие вместе. Приложение два года теперь и были разработаны с параметрами (в application_controller):добавление protect_from_forgery на существующие рельсы webapp

skip_before_filter :verify_authenticity_token, :if => Proc.new { |c| c.request.format == 'application/json' } 
#protect_from_forgery with: :null_session 

Так что не было никакой защиты на всех против CSRF.

Я добавил <% = csrf_meta_tag%> во все мои макеты представления и и protect_from_forgery на моем приложении_controller.

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

Как я могу ввести защиту CSRF в своем приложении?

+0

Возможный дубликат [ПРЕДУПРЕЖДЕНИЕ: Невозможно проверить рельсы аутентификации маркера CSRF] (http://stackoverflow.com/questions/7203304/warning-cant-verify-csrf-token-authenticity-rails) – Slicedpan

ответ

0

Вам необходимо изменить ваши запросы Ajax, чтобы включить токен CSRF. Вы можете настроить все запросы AJAX для отправки маркеров по умолчанию в JQuery, используя следующий код

$("body").bind("ajaxSend", function(elm, xhr, s){ 
    if (s.type == "POST") { 
    xhr.setRequestHeader('X-CSRF-Token', $('meta[name=csrf-token]').attr('content')); 
    } 
}); 

(код, взятый из this question). Другие структуры JS, вероятно, имеют аналогичную функциональность.

+0

Начал писать этот ответ затем понял, что существует почти идентичный вопрос [здесь] (http://stackoverflow.com/questions/7203304/warning-cant-verify-csrf-token-authenticity-rails). Помечено как дубликат – Slicedpan

+0

Great Slicedpan, спасибо за ваш ответ и извините за дубликат. Я видел другие ответы, но на самом деле не понимал, что могу добавить этот код и получить весь мой запрос ajax, содержащий заголовок. Поэтому мне нужно добавить этот код сразу после тега jquery скрипта на моих страницах – rolele

Смежные вопросы