gpt4 book ai didi

jquery - 保护免受伪造和不显眼的 Javascript

转载 作者:行者123 更新时间:2023-12-03 22:08:22 25 4
gpt4 key购买 nike

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

$.ajax({type: "PUT", url: url, data: { dummy: data }, complete: function(data) {}});

当 Rails 获取它时,它会抛出一个 ActionController::InvalidAuthenticityToken 错误。如果可能的话,我想将 protected_from_forgery 的内容保留在那里......但我不知道如何从 javascript 文件传递​​身份验证 token ?

谁能帮帮我吗?

最佳答案

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

<script>
function authToken() {
return '<%= form_authenticity_token if protect_against_forgery? -%>';
}
</script>

authToken被编码为函数,因此您不太可能意外地用其他 JavaScript 覆盖它。

或者,从 Rails 3 开始,身份验证 token 嵌入为 <meta>标签,您可以使用以下方式读取:

<script>
function authToken() {
return $('meta[name="csrf-token"]').attr('content');
}
</script>

在你的主 JS 中,你可以调用 authToken() ,它会以字符串形式返回您的真实性 token ,以包含在您的 Ajax 调用中。例如,使用 jQuery:

$.ajax({
type: 'PUT',
url: url,
data: {
foo: bar,
authenticity_token: authToken()
},
complete: function(data) {}
});

请注意,如果您使用 Rails 的内置 form_for helper,它会自动在隐藏输入中添加真实性 token 。如果您想发送所有表单数据,包括隐藏的身份验证 token ,您只需使用:

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 发送表单数据)时,此模式通常很有用。

关于jquery - 保护免受伪造和不显眼的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/731504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com