通过ajax工作时,phalcon-php-csrf令牌验证失败


phalcon php csrf token validation fails when working via ajax

我正在使用phalcon框架,我决定使用可用的csrf函数。我遵循了文档中显示的所有必要步骤。

我接收数据、令牌及其值,然后运行

$data = $this->request->getJsonRawBody();
print_r($data); //// proper data
if ($this->request->isPost()) {
        if ($this->security->checkToken()) {
            die('proper token');
        }
        else{die('NOT A proper token');}
    }

我的帖子请求是这样的:

$scope.submit = function() {    
                $scope.formData.token = [$("#token").attr("name"), $("#token").val()];        
                $http.post(
                    'http://localhost/project/index/function', 
                    JSON.stringify($scope.formData)
                ).success(function(data) { alert(data);
                    if (data.isValidToken) {
                        alert("Ok, you win!!!");
                    } else {
                        alert("Sorry, not valid CSRF !!!")
                    }
                });
                return false;
            };

我检查了会话数据,生成表单时存储在那里的令牌与ajax请求完成时打印出来的令牌不同。有人能告诉我我做错了什么吗?

Phalcon'Security::checkToken默认使用$_POST。如果需要使用ajax,请将tokenKeytokenValue传递给Phalcon'Security::checkToken

查看此处

$data = $this->request->getJsonRawBody();
if ($this->request->isPost()) {
    $tokenKey = $this->session->get('$PHALCON/CSRF/KEY$');
    $tokenValue = $data->{$tokenKey};
    if ($this->security->checkToken($tokenKey, $tokenValue)) {
        die('proper token');
    }
    else{die('NOT A proper token');}
}