代码之家  ›  专栏  ›  技术社区  ›  seawolf

在基于会话的CSRF中使用Django REST框架

  •  1
  • seawolf  · 技术社区  · 6 年前

    CSRF_USE_SESSIONS = True .

    然而,DRF web UI依赖于这个cookie进行所有交互。这似乎是通过读取 csrftoken cookie和设置 X-CSRFToken django.middleware.csrf.CsrfViewMiddleware.process_view() 如果隐藏字段未包含在请求正文中。此代码设置自 rest_framework.templates.rest_framework.base.html :

    <script>
      window.drf = {
        csrfHeaderName: "{{ csrf_header_name|default:'X-CSRFToken' }}",
        csrfCookieName: "{{ csrf_cookie_name|default:'csrftoken' }}"
      };
    </script>
    

    不使用的DRF表单 POST PUT , PATCH ,和 DELETE 请求以403响应失败。

    相信 CSRF_USE_SESSIONS=True ?

    0 回复  |  直到 6 年前
        1
  •  0
  •   seawolf    5 年前

    这是固定的 https://github.com/encode/django-rest-framework/pull/6207 并作为DRF 3.9.2的一部分发布。更完整的上下文可以在 https://github.com/encode/django-rest-framework/issues/6206 .