Django / AngularJS:CSFR令牌错误

时间:2017-06-16 13:11:50

标签: python angularjs django cookies csrf

我是Django和AngularJS的新手,我几个小时都在努力。

AngularJS Code(我的控制器)用于POST到Django Server:

$http({
    method: 'POST',
    url: 'http://127.0.0.1:8000/polls/', // This is the Django server IP
    data: {'string': 'body'}
    }).then(function successCallback(response) {
     $scope.var= "success";
  }, function errorCallback(response) {
    $scope.var= response; // To display error. 
     });

    }
})

Django服务器代码(视图中):

def index(request):
    return "true"

我得到的确切错误是: POST http://127.0.0.1:8000/polls/ 403(禁止)

错误详情 - CSRF验证失败。请求已中止。您看到此消息是因为此站点在提交表单时需要CSRF cookie。出于安全原因,需要此cookie,以确保您的浏览器不会被第三方劫持。 Blah blah。

修改 更喜欢在不影响Django的任何安全规定的情况下工作的解决方案

2 个答案:

答案 0 :(得分:2)

您必须在帖子调用的标题中包含令牌csrf

    var csrf ='{{ csrf_token }}';
    $http({
        method: 'POST',
        headers: {'X-CSRFToken' : csrf },
        url: 'http://127.0.0.1:8000/polls/', // This is the Django server IP
        data: {'string': 'body'}
        }).then(function successCallback(response) {
         $scope.var= "success";
      }, function errorCallback(response) {
        $scope.var= response; // To display error. 
         });

        }
    })

或免除此次通话的csrf令牌

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def index(request):
    return "true"

答案 1 :(得分:0)

如果你有激活的cors标题。

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def index(request):
    return "true"