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

时间:2014-11-13 05:51:35

标签: php jquery ajax phalcon

我正在使用phalcon Framework,我决定使用可用的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请求完成时打印出的令牌不同。 有人能指出我做错了吗?

1 个答案:

答案 0 :(得分:1)

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

检查here

$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');}
}