Jquery 保护您不被伪造&;低调的Javascript
我的Rails站点中有一些javascript正在进行ajax调用: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令牌 有人能帮我吗?在您的布局中,
$.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>