CSRF验证失败。请求中止Angular 5和Django

时间:2018-04-20 06:44:02

标签: python django angular

在json中将数据从Angular 5前端发布到Django时发生错误

Forbidden (403)

CSRF verification failed. Request aborted.

Help Reason given for failure:

CSRF token missing or incorrect.    

Django log

Forbidden (CSRF token missing or incorrect.): /survey/creatDatabaseTable
[20/Apr/2018 06:33:18] "POST /survey/creatDatabaseTable HTTP/1.1" 403 2513

有些解决方案说您必须在前端代码中包含{% csrf_token %}标记,那么我如何在angular5代码中实现该标记

2 个答案:

答案 0 :(得分:2)

如果懒惰,请将@csrf_exempt放在视图上!

(或@method_decorator(csrf_exempt) if / survey / creatDatabaseTable使用基于类的视图

另一件事是查看SESSION_COOKIE_DOMAIN设置。例如,' csrftoken'如果你从aaa.hasan.com到hasan.com做一个帖子,并且你在设置中没有通配SESSION_COOKIE_DOMAIN,那么这样做的cookie就不会工作

答案 1 :(得分:0)

django不提供Angular应用程序。所以需要先设置cookie。你需要先向django做一个GET请求。

angular.module( '[your module name]',
... [some dependencies] ...
'ngCookies',
... [other dependencies] ...
)
.run( function run( $http, $cookies ){

  // For CSRF token compatibility with Django
  $http.defaults.headers.post['X-CSRFToken'] = $cookies.get('csrftoken');
})