Django 和 AngularJS 都已经支持 CSRF,你的部分很简单。
首先,您需要在 Django 中启用 CSRF,我相信您已经这样做了,如果没有,请关注 Django 文档https://docs.djangoproject.com/en/1.5/ref/contrib/csrf/#ajax。
现在,Django 将csrftoken
在第一个 GET 请求上设置一个名为的 cookie,并X-CSRFToken
在以后的 POST/PUT/DELETE 请求上期望一个自定义的 HTTP 标头。
对于 Angular,它需要名为的 cookieXSRF-TOKEN
并将执行带有标头的 POST/PUT/DELETE 请求X-XSRF-TOKEN
,因此您需要进行一些调整以使两者相互配合:
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
在 js 代码中的某处添加以上两行,module.config() 块是一个很好的地方。
而已。
注意:这是针对 Angular 1.1.5,旧版本可能需要不同的方法。
更新:
由于 Angular 应用程序不是由 django 提供的,为了让 cookie 被设置,Angular 应用程序需要先向 django 发出 GET 请求。