【问题标题】:Django CSRF Error fixed by just visiting page in multi-page form?仅通过访问多页形式的页面来修复 Django CSRF 错误?
【发布时间】:2018-08-09 01:56:31
【问题描述】:

我在两页上有两个表格,一个指向另一个。当在第 1 页上按下“提交”时,它应该会将您带到第 2 页上的表单。第 2 页失败并显示“CSRF 验证失败。请求中止。”原因是“未设置 CSRF cookie。”

奇怪的是,如果我直接转到第 2 页,它加载得很好。如果我刷新页面并重新提交表单,我会再次收到 403,但如果我进入地址栏并点击“Enter”重新访问该页面,它会加载而不会出现错误。什么给了?

我使用的是最新版本的 Django,我在所有视图中使用渲染,在所有表单标签中使用 {% csrf_token %}。

为什么重新访问页面会修复 403 错误?表单之间没有发生登录或身份验证。事实上,我什至没有对第 1 页中提交的数据做任何事情(目前)。

相关代码如下:

第 1 页模板:

<div class="">
    <div class="">
        <h1>Page 1</h1>
        <p>What's up?</p>
        <form action="{% url 'core:getPageTwo' %}" method="post">
            {% csrf_token %}
            {{ form }}
            <input class="yellow_button" type="submit" value="Submit">
        </form>
    </div>
</div>

第 2 页视图:

def getPageTwo(request):
    form = SomeForm()
    context = {'form' : form}
    return render (request, 'core/page_two.html', context)

第 2 页模板:

<div class="">
    <div class="">
        <h1>Page 2</h1>
        <form action="#" method="post">
            {% csrf_token %}
            {{ form }}
        </form>
    </div>
</div>

【问题讨论】:

    标签: python django cookies web csrf


    【解决方案1】:

    找到了。我的 HTTPS 搞砸了。所以我有 CSRF_COOKIE_SECURE = TRUE 的事实搞砸了所有发送 cookie 的尝试。

    【讨论】:

      【解决方案2】:

      除了你的回答@thrillhouse:

      CSRF_COOKIE_SECURE=True 使 csrf 令牌仅适用于 ssl,就像文档中所说的那样:

      是否为 CSRF cookie 使用安全 cookie。如果设置为 True,cookie 将被标记为“安全”,这意味着浏览器可以确保 cookie 仅通过 HTTPS 连接发送。

      所以当你切换回HTTPS连接时,你应该把值转回True

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 1970-01-01
        • 1970-01-01
        • 2012-08-07
        • 2019-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多