在nodeJs应用中,我正在通过ajax请求将multipart/form-data
发送到服务器。我还使用csurf
软件包来防御csrf
攻击
问题
当我不使用ajax请求提交表单时,一切正常,但是当我使用ajax请求提交表单时,服务器上出现invalid csrf token
错误。
据我所知,此错误的原因是由于未随请求一起发送Cookie。
要发送带有ajax请求的cookie,我在通过credentials: 'same-origin'
发出的post
请求中设置了fetch api
,但这不能解决问题。我也尝试设置credentials: 'include'
,但这没什么区别。
问题
我的理解是否正确,这个问题是由于cookie没有与ajax请求一起发送,我该如何解决此问题?
代码
let response = await fetch(requestUrl, {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'multiplart/form-data'
},
body: new URLSearchParams(form)
});
答案 0 :(得分:1)
将fetch()
/ AJAX与csurf
一起使用时,您需要将CSRF令牌作为请求标头传递:
// Read the CSRF token from a hidden input in the form
const token = document.querySelector('input[name="csrf-token"]').value;
// POST using the Fetch API
fetch('/<route.name>', {
headers: {
// pass the csrf token as a header
'CSRF-Token': token
},
method: 'POST',
body: {
...
}
});