Django:"Forbidden (403) CSRF verification failed. Request aborted." in Docker 生产



每当我尝试登录Django管理员或尝试在Django应用程序中注册时,我会遇到此错误。

我正在使用http使用Docker和服务站点的生产。不管我知道,这个问题是由于在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'

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

检查您的错误消息是否包括一行:

  Origin checking failed - http://my.web.site.com does not match any trusted origins.

如果是这样,您的问题可能是您在Docker内部运行的Django代码将请求视为来自另一个站点(外部Docker的一个)并抱怨的请求。

适当的解决方案是信任您的网站。将这样的行添加到您的settings.py

CSRF_TRUSTED_ORIGINS = [
    'http://my.web.site.com',
]

有关更多详细信息,请参见Django文档:跨站点请求伪造保护

尝试此问题的答案:

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

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

这样:

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

另外,您每次使用render_to_response时都必须使用requestContext(请求):

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

,您必须导入身份验证和登录:

from django.contrib.auth import authenticate, login

相关内容

最新更新