Django:“Forbidden(403)CSRF验证失败。请求中止。”在Docker Production中

时间:2016-12-27 10:44:45

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

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

我在Docker中使用Production并使用http提供站点服务。 无论我知道什么,都会出现此问题,因为通过http代替https提供此问题。

这是我的生产settings.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'

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

1 个答案:

答案 0 :(得分:0)

尝试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