我很高兴将ReactJS与Django一起使用。
我想要的很简单。我想发送一个帐户请求。 前端服务器和后端服务器完全分开。它们只与AJAX通信,仅此而已,它们甚至不在同一台服务器中。
我尝试了多种方式来发送帐户请求,但没有任何效果。
这是我在JavaScript中尝试的内容:
在axios上添加名为withCredentials:true
的选项。这会在标题上添加cookie,但是django说" csrftoken不正确或未设置。"
设置以下内容:
axios.defaults.xsrfHeaderName = "X-CSRFToken";
axios.defaults.xsrfCookieName = 'csrftoken';
- >这没有任何影响。
设置以下内容:
axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN' : (document.cookie).replace("csrftoken=", "")
};
- >这使得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,它可以进行一些注册。
有什么方法可以解决这个问题吗?我花了很多时间来做这件事。我真的需要你的帮助。感谢。
答案 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})