Rails Ajax Не удается проверить токен CSRF Подлинность
В моем приложении rails я получаю "ПРЕДУПРЕЖДЕНИЕ: не могу проверить подлинность CSRF-токена" в сообщении ajax на api.
app/views/layouts/application.html.haml:
!!!
%html
%head
= stylesheet_link_tag "application", :media => "all"
= javascript_include_tag "application"
= csrf_meta_tags
%body
= yield
ajax post:
$.ajax({ url: '#{card_credits_path}',
type: 'POST',
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', '#{form_authenticity_token}')},
dataType: "json",
data: { credit_uri: response.data.uri,
email: $('#email:hidden').val(),
name: $('.name').val()
},
success: function(randomobject) {
window.location = '/';
},
error: function(){
console.log("Card information is wrong!");
}
});
Ответы
Ответ 1
Предполагая, что вы установили токен CSRF с помощью тега Rails csrf_meta_tag
, маркер запроса будет доступен в метатеге csrf-token
:
<meta content="u-n-i-q-u-e-t-o-k-e-n" name="csrf-token" />
Поскольку вы используете jQuery, вы можете передать токен вашему запросу AJAX, вызвав следующее значение для клавиши beforeSend
:
function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}
Ответ 2
Этот код уже присутствует в rails/jquery-ujs
, поэтому гораздо проще использовать это:
beforeSend: $.rails.CSRFProtection