Я настроил CSRF при вызове Ajax, он работает, но когда я использую formHelp (обычный), он больше не работает. Это дает ошибку несоответствия токена.
Я отладил и увидел, что это потому, что в заголовке нет x-csrf-token. Но согласно самой документации Cake PHP, вам нужно только передать эту голову на AJAX, так как formHelp работает с CSRF, включая скрытый "_csrftoken".
Кто-нибудь, пожалуйста, помогите мне? ошибка вызывается в этой функции, потому что заголовок не совпадает с заголовком cook ie. Но я не передаю X-CSRF-Token в заголовок, потому что я передаю его через FormHelper и, в соответствии с самой документацией, он необходим, только если это запрос ajax.
protected function _validateToken(ServerRequest $request)
{
$cookies = $request->getCookieParams();
$cookie = Hash::get($cookies, $this->_config['cookieName']);
$post = Hash::get($request->getParsedBody(), $this->_config['field']);
$header = $request->getHeaderLine('X-CSRF-Token');
/*debug($request->getMethod());
exit;*/
if (!$cookie) {
throw new InvalidCsrfTokenException(__d('cake', 'Missing CSRF token cookie'));
}
/*debug(Security::constantEquals($post, $cookie));
debug($request);
/*debug($cookie);*/
//debug($request);
/*debug($header);
debug($cookie);
echo "fim";
exit;*/
if (!Security::constantEquals($post, $cookie) && !Security::constantEquals($header, $cookie)) {
throw new InvalidCsrfTokenException(__d('cake', 'CSRF token mismatch.'));
}
}