2014-11-13 4 views
1

Я работаю с phalcon Framework, и я решил работать с доступной функцией csrf. Я выполнил все необходимые шаги, как показано в документации.Ошибка проверки флакона phalcon php csrf при работе через ajax

Я получаю данные, маркер и его значение и я бегу

$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

Phalcon\Security::checkToken по умолчанию используется $_POST. Если вам нужно использовать ajax, пройдите tokenKey и tokenValue до 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');} 
} 
Смежные вопросы