【发布时间】:2017-04-12 14:22:10
【问题描述】:
在 Django 中,当 CSRF_COOKIE_HTTPONLY 设置为 True 时,CSRF cookie 获得 httponly 标志,这从安全角度来看是可取的,但打破了将此 cookie 添加到 httpProvider 的标准角度解决方案,如下所示:
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
通过 Django 1.9,有一种解决方法,您可以通过将 cookie 放入模板中直接将其传递给应用程序:
<script>
window.csrf_token = "{{ csrf_token }}";
</script>
并将其放入 Angular 应用程序中:
angularApp.config(["$httpProvider", function($httpProvider) {
$httpProvider.defaults.headers.common["X-CSRFToken"] = window.csrf_token;
}]
不幸的是,这不适用于 Django 1.10+ 中的单页 Angular 应用程序,因为 CSRF cookie 在每次请求后都会更改。在 CSRF_COOKIE_HTTPONLY 设置开启的情况下,如何从 Angular 向 Django 1.10+ 发出发布请求?
注意:禁用 CSRF 保护不是一个可接受的答案。
【问题讨论】:
标签: angularjs django cookies csrf django-csrf