通过获取api发送带有ajax请求的cookie

时间:2019-08-02 21:20:44

标签: javascript node.js express csrf fetch-api

在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)
});

1 个答案:

答案 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: {
    ...
  }
});