这是可行的,但由于缺少真实性令牌而被停止:
$(".ajax-referral").click(function(){
$.ajax({type: "POST", url: $(this).parent("form").attr("action"), dataType: "script"});
return false;
});
所以我试着像这样添加:
$(".ajax-referral").click(function(){
$.ajax({type: "POST", url: $(this).parent("form").attr("action") + "?&authenticity_token=" + AUTH_TOKEN, dataType: "script"});
return false;
});
它正确地传递了auth_token作为参数,但似乎丢失了表单的其余部分。
有没有办法既能发送有效的表单数据,又能完成身份验证令牌?
这是一个rails环境。我的脑海里就有了这个。
= javascript_tag "var AUTH_TOKEN = '#{form_authenticity_token}';" if protect_against_forgery?
的事情我已经尝试过了
1.
= hidden_field :authenticity_token, :value => form_authenticity_token
2.
$.ajax({type: "POST", url: $(this).parent("form").attr("action"), dataType: "script", authenticity_token: AUTH_TOKEN});
3.
// Always send the authenticity_token with ajax
$(document).ajaxSend(function(event, request, settings) {
if ( settings.type != 'GET' ) {
settings.data = (settings.data ? settings.data + "&" : "")
+ "authenticity_token=" + encodeURIComponent( AUTH_TOKEN );
}
});
发布于 2011-09-27 20:40:28
实际上,您正在读取form的action
属性并向其发送post ajax请求。要发送表单数据,您必须提交表单,或者可以序列化表单数据并在ajax请求中发送它,如下所示
$(".ajax-referral").click(function(){
$.ajax({
type: "POST",
url: $(this).parent("form").attr("action") + "?&authenticity_token=" + AUTH_TOKEN,
data:$(this).parent("form").serialize(),
dataType: "script"
});
return false;
});
这样做将序列化表单数据并将其与ajax请求一起发送,并且身份验证令牌已经通过查询字符串发送
发布于 2013-11-18 07:21:38
默认情况下,如果在顶部有以下ERB,则此标记也已出现在application.html.erb版面文件头部的一个"meta“标记中:
<%= csrf_meta_tag %>
再培训局大致呈现为:
<meta content="abc123blahblahauthenticitytoken" name="csrf-token">
然后,您可以通过以下代码使用jQuery获取它:
var AUTH_TOKEN = $('meta[name=csrf-token]').attr('content');
发布于 2015-03-17 04:52:51
在我通过JS在请求头上设置X-CSRF-Token
值之前,这些方法都不起作用:
request.setRequestHeader('X-CSRF-Token', token)
当然,token
是CSRF令牌。我没有使用encodeURIComponent()
,而是从<meta name="csrf-token">
标签获得的
更新,因为事实证明这对某些人很有用
所以总而言之:
var token = document.querySelector('meta[name="csrf-token"]').content
request.setRequestHeader('X-CSRF-Token', token)
https://stackoverflow.com/questions/7560837
复制相似问题