繁体   English   中英

Django 应用程序在本地运行,但我在 Heroku 上收到 CSRF 验证失败

[英]Django app runs locally but I get CSRF verification failed on Heroku

我的应用程序在heroku local运行良好,但在部署到 Heroku 后,每次我尝试以管理员身份登录/注册/登录时,它都会返回如下所示的错误。

我试图将@csrf_exempt放在profile视图上,但这并没有解决问题。

我能做什么?

在此处输入图像描述

错误消息是不言自明的(请原谅拼写错误,因为我无法从图像中复制):

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM