Rails Ajax无法验证CSRF令牌真实性

时间:2014-01-22 03:55:23

标签: jquery ruby-on-rails ruby ajax

在我的rails应用程序中,我在ajax的ajax帖子上收到“警告:无法验证CSRF令牌真实性”。

app / views / layouts / application.html.haml

!!!
%html
  %head
    = stylesheet_link_tag "application", :media => "all"
    = javascript_include_tag "application"
    = csrf_meta_tags
  %body
    = yield

ajax帖子

$.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!");
   }
});

2 个答案:

答案 0 :(得分:17)

假设您已使用Rails csrf_meta_tag标记设置了CSRF令牌,请求的令牌将在csrf-token元标记中提供:

<meta content="u-n-i-q-u-e-t-o-k-e-n" name="csrf-token" />

由于您正在使用jQuery,因此可以通过为beforeSend键调用以下值来将令牌传递给您的AJAX请求:

function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))}

答案 1 :(得分:12)

此代码已存在于rails/jquery-ujs中,因此使用该代码要容易得多:

 beforeSend: $.rails.CSRFProtection