【问题标题】:ReactJS & Django : How can I send csrf token with axios in a proper way?ReactJS 和 Django:如何以正确的方式使用 axios 发送 csrf 令牌?
【发布时间】:2018-10-16 11:34:31
【问题描述】:

我对在 Django 中使用 ReactJS 还是很陌生。

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

我尝试了多种方法来发送创建帐户的请求,但均未奏效。

这是我在 JavaScript 中尝试过的:

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

  2. 设置如下:

    axios.defaults.xsrfHeaderName = "X-CSRFToken";
    axios.defaults.xsrfCookieName = 'csrftoken';
    

-> 这不会产生任何影响。

  1. 设置如下:

    axios.defaults.headers.common = {
      'X-Requested-With': 'XMLHttpRequest',
      'X-CSRF-TOKEN' : (document.cookie).replace("csrftoken=", "")
    };
    

-> 这使得 axios 只发出“选项”方法请求。但我不知道为什么,当然,这不起作用。

这是我在 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。

有没有办法解决这个问题?我为此花费了很多时间。我真的需要你的帮助。谢谢。

【问题讨论】:

标签: django reactjs cookies csrf axios


【解决方案1】:

您可以通过 npm(或其他适合您的方法)链接 here 安装 js-cookie

js-cookie 中调用 Cookie,如下所示: 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})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2021-10-24
    • 2021-07-14
    • 2020-11-09
    • 1970-01-01
    • 2019-01-29
    • 2023-03-28
    • 2018-04-23
    相关资源
    最近更新 更多