[英]Django app runs locally but I get CSRF verification failed on Heroku
错误消息是不言自明的(请原谅拼写错误,因为我无法从图像中复制):
Origin checking failed - https://pacific-coast-78888.herokuapp.com does not match any trusted origins
您使用的域不是 CSRF 的可信来源。
然后有一个文档链接,我怀疑该链接指向Django CSRF 文档,尽管CSRF_TRUSTED_ORIGINS
设置的文档可能更有用:
不安全请求的可信来源列表(例如
POST
)。对于包含
Origin
header 的请求,Django 的 CSRF 保护要求 header 与Host
header 中存在的源相匹配。
在您的settings.py
中查找CSRF_TRUSTED_ORIGINS
并将https://pacific-coast-78888.herokuapp.com
添加到列表中。 如果该设置尚不存在,只需添加它:
CSRF_TRUSTED_ORIGINS = ["https://pacific-coast-78888.herokuapp.com"]
如果Heroku使用django "4.xx" 版本:
那么,如果报错如下图:
来源检查失败 - https://example.com与任何受信任的来源都不匹配。
将此代码添加到“settings.py”中:
CSRF_TRUSTED_ORIGINS = ['https://example.com']
在您的情况下,您收到此错误:
来源检查失败 - https://pacific-coast-78888.herokuapp.com不匹配任何受信任的来源。
因此,您需要将此代码添加到您的“settings.py”中:
CSRF_TRUSTED_ORIGINS = ['https://pacific-coast-78888.herokuapp.com']
我遇到了同样的错误,只是将我的 DjangoVersion==4.0.4 降级为 DangoVersion==3.2.13。 它对我有用。
看来您在项目的 setting.py 文件中没有您的 heroku 地址作为可信来源,为此,您可以使用 corsheaders
pip install django-cors-headers
然后在你的 settings.py 文件中
INSTALLED_APPS = [
...
'corsheaders',
...
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
...
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'corsheaders.middleware.CorsMiddleware',
]
如果您尚未部署,您可以添加CORS_ORIGIN_ALLOW_ALL = True
但因为您知道使用源白名单部署应用程序的位置是一个更好的主意
CORS_ORIGIN_WHITELIST = (
'https://pacific-coast-78888.herokuapp.com',
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.