繁体   English   中英

Django - 403 Forbidden CSRF验证失败

[英]Django - 403 Forbidden CSRF verification failed

我在Django有一个联系表格供我的网站使用,当我在本地进行测试时它工作正常,但现在当我尝试提交我的联系表单“live”时,总是会出现403 Forbidden CSRF验证失败。

视图:

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            send_mail(
                cd['subject'],
                cd['message'],
                cd.get('email', 'noreply@example.org'),
                ['example@gmail.com'],
            )
            return HttpResponseRedirect('/thanks/')
    else:
        form = ContactForm()
    return render(request, 'contact/contact.html', {'form': form})

contact.html

{% extends 'site_base.html' %}

{% block head_title %}Contact{% endblock %}

{% block body %}

      <h2>Contact Us</h2>
      <p>To send us a message, fill out the below form.</p>

    {% if form.errors %}
        <p style="color: red;">
            Please correct the error{{ form.errors|pluralize }} below.
        </p>
    {% endif %}

    <form action="" method="POST">
    {% csrf_token %}
        <table>
            {{ form.as_table }}
        </table>
        <br />
        <button type="submit" value="Submit" class="btn btn-primary">Submit</button>
    </form>    

{% endblock %}

设置(我认为相关的设置):

SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
MIDDLEWARE_CLASSES = [
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.middleware.common.CommonMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

在试图排除某些事情之后,这就是我发现的。 当我注释掉SESSION_COOKIE_SECURE = TRUECSRF_COOKIE_SECURE = TRUESESSION_EXPIRE_AT_BROWSER_CLOSE = TRUE它没有问题。

如果我只是注释掉CSRF_COOKIE_SECURE = TRUE它可以正常工作。 我处理CSRF的方式似乎有点奇怪......任何帮助都会很棒。

对我来说听起来像网站不是https,如果它在你注释掉那条线时有效吗? CSRF_COOKIE_SECURE=True使csrf令牌适用于每个文档的ssl https://docs.djangoproject.com/en/1.7/ref/settings/#csrf-cookie-secure

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM