CSRF令牌只是在Django中随机激发

我在我的html中有一个表单:

<form id="form" action="" method="post"> {% csrf_token %}
   <div>{{form.input1}}</div>
   <div>{{form.input2}}</div>
   <div>{{form.input3}}</div>
   <input type="submit" class="btn" name="submit" value="submit">
</form>

并在我的urls.py:

urlpatterns = [
    url(r'^$', views.MyView.as_view(success_url='/'), name='index'),
]

有时当我点击提交时,csrf令牌会被触发,并说csrf令牌丢失或不正确。

首先这是怎么可能的? 该文件说:

这通常只有在存在真正的跨站点请求伪造时,或者由于编程错误,CSRF令牌未包含在POST表单中时才会出现。

从我看到它正确实施。

该错误消息进一步说

  • 您的浏览器正在接受Cookie
  • 它确实如此

  • 视图函数将请求传递给模板的渲染方法
  • 根据文件我有这个。

  • 在模板中,每个POST表单内都有一个{%csrf_token%}模板标签,用于定位内部URL
  • 确实如此,但这就是拥有csrf标记的关键所在?

  • 如果你不使用CsrfViewMiddleware ,则必须使用csrf_protect上使用的任何意见csrf_token模板标签,以及那些接受POST数据。
  • 根据文档,这是默认激活的。

    那么为什么有时会触发(很少)呢?


    既然你说这个错误有时只会发生,我认为这个问题可能是你用表单打开了页面,在另一个选项卡上登录,然后提交了表单。

    这会导致错误,因为登录时会更新csrf标记。不幸的是,您无法对此做任何事情。


    你是动态渲染你的表单还是类似的东西? Django只会将{% csrf_token %}替换为隐藏的输入字段,并在该标签从头开始存在于模板中时注入csrftoken cookie。

    首先尝试装饰你的观点:

    from django.views.decorators.csrf import ensure_csrf_cookie
    
    @ensure_csrf_cookie
    def index(request):
        return render(request, 'index.html')
    

    这将始终注入cookie。

    如果您真的在动态操作表单,您需要使用csrftoken cookie手动检索csrf标记,然后使用隐藏字段(额外请求参数)或标题在表单中提交它,如文档中所述。

    链接地址: http://www.djcxy.com/p/56525.html

    上一篇: CSRF token just fires randomly in django

    下一篇: 403 Forbidden. CSRF token missing or incorrect