Django CSRF错误是通过以多页形式访问页面来修复的吗?

问题描述 投票:1回答:2

我在两个页面上有两个表单,一个表示另一个表单。如果在第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
2个回答
0
投票

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


0
投票

除了你的答案@thrillhouse:

CSRF_COOKIE_SECURE=True使csrf令牌仅适用于ssl,就像文档也说:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.