Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 保护您不被伪造&;低调的Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Jquery 保护您不被伪造&;低调的Javascript

Jquery 保护您不被伪造&;低调的Javascript,jquery,ruby-on-rails,ajax,Jquery,Ruby On Rails,Ajax,我的Rails站点中有一些javascript正在进行ajax调用: $.ajax({type: "PUT", url: url, data: { dummy: data }, complete: function(data) {}}); 当Rails得到它时,它抛出一个ActionController::InvalidAuthenticationToken错误。如果可能的话,我想把防伪的东西放在里面。。。但是我不知道如何从javascript文件传递auth令牌 有人能帮我吗?在您的布局中,

我的Rails站点中有一些javascript正在进行ajax调用:

$.ajax({type: "PUT", url: url, data: { dummy: data }, complete: function(data) {}});
当Rails得到它时,它抛出一个
ActionController::InvalidAuthenticationToken
错误。如果可能的话,我想把防伪的东西放在里面。。。但是我不知道如何从javascript文件传递auth令牌


有人能帮我吗?

在您的布局中,在运行任何其他JS之前添加以下内容:

<script>
  function authToken() {
    return '<%= form_authenticity_token if protect_against_forgery? -%>';
  }
</script>
在主JS中,您可以调用
authToken()
,它将以字符串形式返回您的真实性令牌,以包含在Ajax调用中。例如,使用jQuery:

$.ajax({
  type: 'PUT',
  url:  url,
  data: {
    foo: bar,
    authenticity_token: authToken()
  },
  complete: function(data) {}
});
请注意,如果为helper使用Rails内置的
form_,它会自动在隐藏输入中添加真实性标记。如果要发送表单的所有数据,包括隐藏的身份验证令牌,只需使用:

var $form = $('form');
$.ajax({
  url:      $form.attr('action'),
  type:     $form.attr('method'),
              // "get" or "post"; overridden by Rails' hidden "_method"
              // input value, e.g., "put"
  data:     $form.serialize(),
              // Includes hidden "authenticity_token" and "_method" inputs
  complete: function(data) {}
});

当您已经编写了一个不使用JS的表单,并且正在添加一个不引人注目的JS层,该层只是通过Ajax发送表单数据时,此模式通常非常有用。

感谢上述解决方案。
我在我的站点中使用了一些标准表单,它们没有使用rails form_标记,所以我只是将其添加为隐藏表单元素

<form action="...">
    <%= hidden_field_tag 'authenticity_token', form_authenticity_token if protect_against_forgery? %>
    ... rest of form...
</form>

... 剩下的部分。。。
工作是一种享受

<form action="...">
    <%= hidden_field_tag 'authenticity_token', form_authenticity_token if protect_against_forgery? %>
    ... rest of form...
</form>