gpt4 book ai didi

ajax - 无模板 Django + AJAX : Does Django's CSRF token get updated during the course of a browsing session?

转载 作者:行者123 更新时间:2023-12-03 00:11:41 27 4
gpt4 key购买 nike

我当前的设置是 AngularJS + Django 1.5,我完全放弃了 Django 模板引擎的使用(即后端几乎是一个 API 服务器)。

由于我没有使用 csrf_token 模板标记,Django 也不会设置和发送 csrftoken cookie 作为响应。按照官方文档的指示,应使用 ensure_csrf_cookie() 装饰器强制装饰 View 发送 csrftoken cookie。

我已将 ensure_csrf_cookie() 装饰器应用于 View ,该装饰器为我的 Web 客户端在引导时调用的第一个 GET 请求提供服务。这样,我的 Web 客户端就获得了 CSRF token ,从此可以向服务器调用不安全的方法(例如 POST)。

仅当 CSRF token 在浏览 session 结束之前保持不变时,上述设置才能正常工作。

问题:Django 的 CSRF token 会在浏览 session 过程中更新吗?如果"is",这是否意味着我需要将 ensure_csrf_cookie() 装饰器应用于我拥有的所有 View ?

最佳答案

1) Does Django's CSRF token get updated during the course of a browsing session?

看起来像 CSRF token 每个 session 都是唯一的,但它基于我的观察,我没有“官方”来源。对于 Angular.js,我使用以下代码没有问题:

angular.module('app', ...)
.config(function($httpProvider) {
var cookies = document.cookie.split(';');
var csrftoken = _.find(cookies, function(v) {
return v.trim().indexOf('csrftoken=') == 0;
});
if(csrftoken) {
$httpProvider.defaults.headers.common['X-CSRFToken'] = csrftoken.split('=')[1];
}
})

由于我从 Django 提供 HTML,因此当 Angular 引导时,cookie 已经存在。

2) If 'yes', does that mean I would need to apply the ensure_csrf_cookie() decorator to all the views I have?

您可以尝试CORS相反,如果 CSRFOtto Yiu维持 django-cors-headers包,已知它可以与 REST 框架 API 一起正常工作。

一些(未经测试的)应用ensure_csrf_cookie()的想法:

  • 猴子补丁 APIView
  • 创建一个 CSRFCookie mixin 并将其添加到您的 View
  • ensure_csrf_cookie() 应用到您的基类

关于ajax - 无模板 Django + AJAX : Does Django's CSRF token get updated during the course of a browsing session?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20361653/

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