gpt4 book ai didi

django - 在基于 session 的 CSRF 中使用 Django REST 框架

转载 作者:行者123 更新时间:2023-12-04 17:45:02 24 4
gpt4 key购买 nike

我在无法使用基于 cookie 的 CSRF token 的环境中使用 Django + Django REST Framework;因此我必须使用 CSRF_USE_SESSIONS = True 运行.

但是,DRF Web UI 依赖此 cookie 进行所有交互。看来这是通过阅读 csrftoken 设置的cookie 和设置 X-CSRFToken后续请求的 header ,然后由 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确实在表单正文中包含 CSRF token ,因此没有 cookie 意味着 Web 界面根本无法访问 CSRF token ,导致所有 PUT , PATCH , 和 DELETE请求失败并返回 403 响应。

我相信这是 DRF 中的一个错误,但这可能是预期的行为。有人能解释一下 DRF 是如何与 CSRF_USE_SESSIONS = True 一起使用的吗? ?

最佳答案

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

关于django - 在基于 session 的 CSRF 中使用 Django REST 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52461537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com