簡體   English   中英

部署到 AWS 服務器時 django 應用程序的 CSRF 令牌錯誤

[英]CSRF token error for django app when deploying to AWS server

我有一個在本地運行良好的 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>

關於如何修復以及為什么它在本地運行正常但在部署時無法運行的任何建議表示贊賞

嘗試重新排序中間件。 它們按順序執行。 因此,任何中間件都會將請求傳遞給下一個,如果某些內容被阻止,它將無法用於下一個中間件,依此類推

嘗試SESSION_COOKIE_SECURE = True設置以保護您的 cookie 當 cookie 不安全時會發生此錯誤 可能調試為 True 確保其 False DEBUG = False有時為中間件訂單重新排序您的中間件

如果您最近升級到 Django 4.0,您現在需要設置 CSRF_TRUSTED_ORIGINS - 這在我的情況下修復了錯誤。 https://docs.djangoproject.com/en/4.0/ref/settings/#csrf-trusted-origins

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM