python - 部署到 AWS 服务器时 django 应用程序的 CSRF 令牌错误
问题描述
我有一个在本地运行良好的 django 站点,但是在尝试使用 AWS elastic beanstalk 进行部署时,当我尝试登录时出现以下错误(使用 django allauth)
禁止 (403) CSRF 验证失败。请求中止。
日志状态:
禁止(未设置 CSRF cookie。):/accounts/login/
我的 settings.py 中间件有:
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.common.BrokenLinkEmailsMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
]
如果我注释掉“django.middleware.csrf.CsrfViewMiddleware”那么它工作正常
表单有一个 csrf_token:
<form class="login" method="POST" action="{% url 'account_login' %}">
{% csrf_token %}
{{ form|crispy }}
{% if redirect_field_value %}
<input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
{% endif %}
<a class="button secondaryAction" href="{% url 'account_reset_password' %}">{% trans "Forgot Password?" %}</a>
<button class="primaryAction btn btn-primary" type="submit">{% trans "Sign In" %}</button>
</form>
关于如何修复以及为什么它在本地运行正常但在部署时无法运行的任何建议表示赞赏
解决方案
如果您最近升级到 Django 4.0,您现在需要设置 CSRF_TRUSTED_ORIGINS - 这在我的情况下修复了错误。https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins
推荐阅读
- ios - 通过点击整行为选取器选择一个值
- python - tkinter 不能 .get() 文本变量
- python - 不了解如何在 geopandas 中使用“urn:ogc:def:crs:OGC:1.3:CRS84”
- python - 从 python.org 安装 python 正在 Microsoft\WindowsApps\python.exe 文件夹中完成。如何在默认文件夹上执行?
- angular - Angular 如何知道双向数据绑定中要绑定的“事件”
- rest - 运行定期(主要)任务并提供 REST 接口的 Perl 脚本
- python-3.x - For 循环计算 Pandas 子类别列中每个不同值的 desc 统计信息
- datetime - 打印经过时间时如何抑制日期
- python - 如何将匿名函数传递给 Celery 任务?(或者以其他方式实现我的目标?)
- ios - 在 iOS 13 中更改搜索栏占位符文本颜色