reactjs - React 和 Django 之间的 CRSF 令牌?
问题描述
我一直在尝试执行一个简单的端点,我从我的前端 React 中使用 Django 提供。这是一个 POST 请求,用于检查 URL 是否存在。这只是一个演示,因此我可以熟悉完整的堆栈过程。问题是任何尝试在 React 之外测试此端点的尝试,我都会Forbidden: CSRF token missing or incorrect
在我的 Django 控制台中收到错误日志,同时在 React 中我只是无法获取。这是我所拥有的:
相关代码
视图.py
def check_url(request, url):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"}
r = requests.get(url, headers=headers)
return HttpResponse(status=r.status_code)
组件.jsx
//django crsf token for api
const getCookie = (name) => {
var cookieValue = null;
if (document.cookie && document.cookie !== "") {
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++) {
var cookie = $.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) === name + "=") {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
};
//handles making api call with the cookie
const APIcall = () => {
var csrftoken = getCookie("csrftoken");
fetch("http://127.0.0.1:8000/check_url/", {
credentials: "include",
method: "POST",
mode: "same-origin",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
"X-CSRFToken": csrftoken,
},
body: {
"url":
"https://stackoverflow.com/questions/50732815/how-to-use-csrf-token-in-django-restful-api-and-react",
},
});
};
输出
使用 React 的每个函数调用的输出都Unhandled Rejection (TypeError): Failed to fetch
没有 Django 中的尝试日志。
每次使用https://reqbin.com/调用的输出是403 (Forbidden)
和 Django 中的日志。
我试过的
- 通过stackoverflow仔细阅读并找到了一些有用的链接,这些链接给了我一些像这里这样的代码,但它仍然没有响应
- 添加
@ensure_csrf_cookie
到我的视图中,但这没有任何效果
这就是我自己走了多远,有太多的不确定性让我无法真正前进。一方面,如果https://reqbin.com/能够连接,views.py 中的代码似乎可以工作,但问题是令牌。因为我的 React 代码是唯一对服务器没有任何影响的东西,所以我的 fetch 可能是错误的。我只是不知道它怎么错了。感谢您的任何提示。
解决方案
推荐阅读
- python - 为什么我不能填充我的 tksheet 表格行?
- python - Flask 渲染以前版本的 CSS
- python-3.x - aiomysql 选择数据问题:未更新
- c - 为什么使用c不能在函数外访问函数中的内存空间malloc
- java - Spring boot 没有从 Maven 项目中的 soap wsdl 生成 java 类。这是我的 pom.xml
- windows - 如何在 Rust 中创建一个继承自 C++ 中定义的 COM 对象的 COM 对象?
- javascript - 同级组件不接收发出的更改
- algorithm - 代表顶点循环覆盖
- reactjs - 如何通过 React 动态显示数据列表?
- javascript - Redux Store 向原始选择添加重复内容和导航产生空数组