gpt4 book ai didi

jquery - csurf AJAX 调用 - 无效的 CSRF token

转载 作者:太空宇宙 更新时间:2023-11-03 22:29:40 26 4
gpt4 key购买 nike

我正在使用 Express 中间件 csurf 进行 CSRF 保护。如果我将它与表单一起使用,将 token 放入隐藏字段,则路由背后的操作就会起作用。现在我想做一个简单的 AJAX 调用,但 csurf 说它无效。

AJAX 调用:

$('.remove').on('click', function () {
var csrf = $(this).attr('data-csrf');
$.ajax({
type: 'DELETE',
url: '/user/' + $(this).attr('data-id'),
data: {
_csrf: csrf
},
success: function (data) {
//.....
}
});
});

View 中的部分:

<td class="uk-table-middle">
<button data-id="{{ _id }}" data-csrf="{{ csrfToken }}" class="uk-button-link uk-text-large remove">
<i class="uk-icon-remove"></i>
</button>
</td>

以及来自中间件的初始化:

import * as csurf from 'csurf';
// init bodyparse and and and...
app.use(csurf());

最佳答案

我不知道 Express 中的情况,但通常 CSRF token 位于 cookie 内,因此您将需要这两个函数:

 function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}

function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

然后:

var csrftoken = getCookie('csrftoken');
$.ajax({
    url : formURL,
    type: "POST",
    data : postData,
beforeSend: function(xhr, settings){
if (!csrfSafeMethod(settings.type)) xhr.setRequestHeader("X-CSRFToken", csrftoken);
},
    success:function(data, textStatus, jqXHR){

    },
    error: function(jqXHR, textStatus, errorThrown){
        //if fails
    }
});

或者,如果您不想使用 jQuery,您可以使用 XMLHttpRequest 发出 AJAX 请求:

var csrftoken = getCookie('csrftoken');
var xhr = new XMLHttpRequest();

xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.setRequestHeader("X-CSRFToken", csrftoken);
xhr.onload = function(){
if(xhr.status === 200){
var response = JSON.parse(xhr.responseText);
console.log(response)
}
};
xhr.send(encodeURI('category=' + cat));

关于jquery - csurf AJAX 调用 - 无效的 CSRF token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264129/

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