Торт php - проблема CSRF FormHelp не работает - PullRequest
0 голосов
/ 03 мая 2020

Я настроил 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.'));
    }
}
...