【问题标题】:Django: "Forbidden (403) CSRF verification failed. Request aborted." in Docker ProductionDjango:“禁止 (403) CSRF 验证失败。请求中止。”在 Docker 生产中
【发布时间】:2017-05-11 15:36:27
【问题描述】:

每当我尝试登录 Django Admin 或尝试在我的 Django 应用程序中注册时,我都会收到此错误。

我在 Docker 中使用 Production 并使用 http 服务站点。 据我所知,这个问题是因为通过http 而不是https 提供的。

这是我的生产设置.py:

SECURE_HSTS_SECONDS = 518400
SECURE_HSTS_INCLUDE_SUBDOMAINS = env.bool('DJANGO_SECURE_HSTS_INCLUDE_SUBDOMAINS', default=True)
SECURE_CONTENT_TYPE_NOSNIFF = env.bool('DJANGO_SECURE_CONTENT_TYPE_NOSNIFF', default=True)
# SECURE_BROWSER_XSS_FILTER = True
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SECURE_SSL_REDIRECT = env.bool('DJANGO_SECURE_SSL_REDIRECT', default=False)
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_HTTPONLY = True
X_FRAME_OPTIONS = 'DENY'

我知道我必须对此设置进行一些更改才能使其正常工作,但我不知道是哪一个。

【问题讨论】:

  • 也遇到了这个问题,我不得不删除所有我不知道它们工作方式的安全设置,使用默认的 cookiecutter-django 设置。

标签: python django django-admin csrf django-csrf


【解决方案1】:

试试this question的答案:

您需要在表单中添加 {% csrf_token %}

https://docs.djangoproject.com/en/1.4/ref/contrib/csrf/

像这样:

<form>
    {% csrf_token %}
    <anything_else>
</form>

此外,每次使用 render_to_response 时都必须使用 RequestContext(request) :

return render_to_response("login.html",
    {"registration_id":registration_id},
    context_instance=RequestContext(request))

你必须导入验证和登录:

from django.contrib.auth import authenticate, login

【讨论】:

  • 我的问题不在于 {% csrf_token %},我的网站在 https 上运行良好,但只有当我使用 http 提供服务时才会出现此问题
猜你喜欢
  • 1970-01-01
  • 2018-11-05
  • 2016-08-27
  • 2017-06-26
  • 2018-06-06
  • 2019-07-22
  • 2016-05-12
  • 2017-08-06
相关资源
最近更新 更多