Ume*_*thi 32 javascript ajax jquery
我需要传递CSRFToken基于Ajax的帖子请求,但不确定如何以最佳方式完成此操作.使用内部检查CSRFToken请求的平台(仅限POST请求)
最初我想把它添加到标题中
$(function() {
$.ajaxSetup({
headers : {
'CSRFToken' : getCSRFTokenValue()
}
});
});
Run Code Online (Sandbox Code Playgroud)
这将使它可用于每个Ajax请求,但它不适用于我的情况,因为在请求CSRFToken中仍然为null.
有什么方法可以设置CSRFToken所有Ajax调用处理POST类型
编辑 如果我在Ajax调用中执行类似的操作
data: {"newsletter-subscription-email" : "XXX" , 'CSRFToken': getCSRFTokenValue()},
Run Code Online (Sandbox Code Playgroud)
一切都很好.
我的问题是,我想将CSRFToken值作为请求参数传递而不是作为请求标头传递
Kri*_*h R 29
这个怎么样,
$("body").bind("ajaxSend", function(elm, xhr, s){
if (s.type == "POST") {
xhr.setRequestHeader('X-CSRF-Token', getCSRFTokenValue());
}
});
Run Code Online (Sandbox Code Playgroud)
参考:http://erlend.oftedal.no/blog/? blogid = 118
要CSRF作为参数传递,
$.ajax({
type: "POST",
url: "file",
data: { CSRF: getCSRFTokenValue()}
})
.done(function( msg ) {
alert( "Data: " + msg );
});
Run Code Online (Sandbox Code Playgroud)
这是我在使用 ajax 发送 POST 请求时用来防止 CSRF 令牌问题的代码
$(document).ready(function(){
function getCookie(c_name) {
if(document.cookie.length > 0) {
c_start = document.cookie.indexOf(c_name + "=");
if(c_start != -1) {
c_start = c_start + c_name.length + 1;
c_end = document.cookie.indexOf(";", c_start);
if(c_end == -1) c_end = document.cookie.length;
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
}
$(function () {
$.ajaxSetup({
headers: {
"X-CSRFToken": getCookie("csrftoken")
}
});
});
Run Code Online (Sandbox Code Playgroud)
});
你可以用这个:
var token = "SOME_TOKEN";
$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
jqXHR.setRequestHeader('X-CSRF-Token', token);
});
Run Code Online (Sandbox Code Playgroud)
来自文档:
jQuery.ajaxPrefilter([dataTypes],handler(options,originalOptions,jqXHR))
描述:在发送每个请求之前以及$ .ajax()处理它们之前,处理自定义Ajax选项或修改现有选项.
小智 5
如果您使用 lusca 在 node.js 中工作,也可以尝试以下操作:
$.ajax({
url: "http://test.com",
type:"post"
headers: {'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')}
})
Run Code Online (Sandbox Code Playgroud)
从 JSP
<form method="post" id="myForm" action="someURL">
<input name="csrfToken" value="5965f0d244b7d32b334eff840...etc" type="hidden">
</form>
Run Code Online (Sandbox Code Playgroud)
这是在挣扎了 3 小时后对我有用的最简单的方法,只需像这样从输入隐藏字段中获取令牌,并且在执行 AJAX 请求时只需要在标头中传递此令牌,如下所示:-
来自 jQuery
var token = $('input[name="csrfToken"]').attr('value');
Run Code Online (Sandbox Code Playgroud)
来自普通的 Javascript
var token = document.getElementsByName("csrfToken").value;
Run Code Online (Sandbox Code Playgroud)
最终的 AJAX 请求
$.ajax({
url: route.url,
data : JSON.stringify(data),
method : 'POST',
headers: {
'X-CSRF-Token': token
},
success: function (data) { ... },
error: function (data) { ... }
Run Code Online (Sandbox Code Playgroud)
});
现在你不需要在 web 配置中禁用 crsf 安全性,而且这不会在控制台上给你 405(Method Not Allowed) 错误。
希望这会帮助人们.. !!
| 归档时间: |
|
| 查看次数: |
106912 次 |
| 最近记录: |