У меня проблемы с компонентом защиты CSRF в Phalcon с Ajax.Использование службы защиты CSRF с Ajax в Phalcon
HTML форма
<form id="signup-form" onSubmit="onSignUpSubmit(); return false;">
<input id="username" type="text" placeholder="Username" />
<input id="password" type="password" placeholder="Password" />
<input id="email" type="text" placeholder="Email" />
<input id="signup-csrf-token" name="{{ security.getTokenKey() }}" val="{{ security.getToken() }}" type="hidden" />
<button class="btn btn-primary btn-block" type="submit">Sign Up</button>
</form> <!-- #signup-form -->
Ajax код
var username = $('#username', '#signup-form').val(),
password = $('#password', '#signup-form').val(),
email = $('#email', '#signup-form').val(),
csrfKey = $('#signup-csrf-token').attr('name'),
csrfValue = $('#signup-csrf-token').attr('val');
var postData = {
'username': username,
'password': password,
'email': email
};
postData[csrfKey] = csrfValue;
$.ajax({
type: 'POST',
url: '{{ url('/accounts/signup.action') }}',
data: postData,
dataType: 'JSON',
success: function(result){
console.log(result);
}
});
При отправке запроса Ajax в первый раз, $this->security->checkToken()
функции контроллера возвращает истину. Но во второй раз и позже функция возвращает false.
Я думаю, что csrfToken
изменений для каждого HTTP-запроса вызвали эту проблему. Но как его решить?
Может ли кто-нибудь мне помочь?
Да, это решение! Позвольте мне посмотреть, как это сделать в Phalcon. –
Вы сказали, что это работает, что пошло не так? – fyrye
Извините, но сейчас работает. –