reactjs - 来自 Django 服务器的 reactjs 请求时出错(403 错误/CORS)
问题描述
我有一个 reactjs 项目,它使用 API 向 django-rest-framework 发出请求。它以前工作正常,但我不确定是什么让它停止工作。
我已经在使用 django-cors-headers。
我的设置.py:
INSTALLED_APPS = [
...
'rest_framework',
"corsheaders",
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
]
CORS_ALLOW_ALL_ORIGINS = True
我的 reactjs 请求:
fetch('/api/user/', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(obj)
})
我在 django 终端中遇到的错误:
Forbidden: /api/user/
[06/Oct/2021 01:15:31] "POST /api/user/ HTTP/1.1" 403 58
reactjs浏览器中的控制台和网络选项卡出错:
// console error:
UserPage.js:65 POST http://localhost:3000/api/user/ 403 (Forbidden)
//network error:
Referrer Policy: strict-origin-when-cross-origin
//Preview in Networks tab:
detail: "CSRF Failed: CSRF token missing or incorrect."
更新 我的 reactjs 终端:
Local: http://localhost:3000
On Your Network: http://172.22.192.1:3000
当我使用它打开我的反应项目时,http://172.22.192.1:3000
它工作正常,但使用http://localhost:3000
它仍然无法发送 POST 请求。
解决方案
要解决您的问题,您可以在 Django 设置文件中使用CORS_ORIGIN_WHITELIST
代替。CORS_ALLOW_ALL_ORIGINS
代替 :
CORS_ALLOW_ALL_ORIGINS = True
经过 :
CORS_ORIGIN_WHITELIST = (
'http://localhost:3000', # React default port = 3000
'http://localhost:8000', # Django default port = 8000
)
# Change the url to suit your needs.
注意:定义CORS_ALLOW_ALL_ORIGINS
必须True
允许所有来源,但我之前遇到过同样的问题并通过CORS_ORIGIN_WHITELIST
解决它来替换它。那就试试吧。
Django CSRF-TOKEN 更新: 此链接可能会解决您关于 csrf_token 的问题
推荐阅读
- angular - Angular 5 JWT 总是说“无效令牌”
- angular - Angular 路由的条件
- java - 使用 intellij 和 Tomcat 的 SOAP Web 服务中的 web.xml 错误
- javascript - 如何使麦克风静音(但不是传入声音)?
- java - 在Java中的Hashmap中使用过去的数据和ArrayList的当前数据
- javascript - 当我们点击 iPhoneX 中的文本字段时,键盘没有打开
- sql-server - 集成服务目录 - 拒绝访问路径
- java - 如何将使用 wsadmin 从 websphere 中提取的 ConfigProperties_server1.props 转换为 xml 或 json 文件?
- python - Python - 正则表达式 - 匹配某些字符之间的字符
- javascript - 是否可以通过文件上传上传 JSON 文件并在 Angular 6 中读取内容而不与 API 交谈?