ReactJS& Django:我怎样才能以正确的方式发送带有axios的csrf令牌?

时间:2018-05-06 14:52:20

标签: django reactjs cookies csrf axios

我很高兴将ReactJS与Django一起使用。

我想要的很简单。我想发送一个帐户请求。 前端服务器和后端服务器完全分开。它们只与AJAX通信,仅此而已,它们甚至不在同一台服务器中。

我尝试了多种方式来发送帐户请求,但没有任何效果。

这是我在JavaScript中尝试的内容:

  1. 在axios上添加名为withCredentials:true的选项。这会在标题上添加cookie,但是django说" csrftoken不正确或未设置。"

  2. 设置以下内容:

    axios.defaults.xsrfHeaderName = "X-CSRFToken";
    axios.defaults.xsrfCookieName = 'csrftoken';
    
  3. - >这没有任何影响。

    1. 设置以下内容:

      axios.defaults.headers.common = {
        'X-Requested-With': 'XMLHttpRequest',
        'X-CSRF-TOKEN' : (document.cookie).replace("csrftoken=", "")
      };
      
    2. - >这使得axios只能做出#34;选项"方法请求。但我不知道为什么,当然,这不起作用。

      这是我在Django的settings.py中的更改内容:

      CSRF_COOKIE_NAME = "X-CSRFToken"
      CORS_ORIGIN_ALLOW_ALL = True
      CORS_ALLOW_CREDENTIALS = True
      CORS_EXPOSE_HEADERS = (
          'Access-Control-Allow-Origin: *',
      )
      

      当然,我在视图之上添加了@ensure_csrf_cookie,它可以进行一些注册。

      有什么方法可以解决这个问题吗?我花了很多时间来做这件事。我真的需要你的帮助。感谢。

1 个答案:

答案 0 :(得分:0)

您可以通过npm(或适合您的其他方法)链接here

安装js-cookie

按以下方式调用js-cookie中的Cookies: import Cookies from 'js-cookie';

然后通过以下操作来获取Cookie:Cookies.get()

Cookies.get()为您提供了一个包含csrftoken的对象。因此,您可以整体上执行以下操作:

const cookies = Cookies.get()

然后在axios请求的标头中添加以下内容:

headers: new Headers({"Content-Type": "application/json", 'X-CSRFToken': cookies.csrftoken})