Кодексайнер csrf просрочен токен - PullRequest
4 голосов
/ 05 июня 2011

В моем приложении ajax codeigniter, если время сеанса пользователя истекло, и они отправляют форму ajax, так как срок действия токена csrf истек, сервер возвращает ошибку 500 ... как мне сервер вместо этого вернуть ошибку 401чтобы я мог хотя бы обработать ошибку и перенаправить пользователя в форму входа?

1 Ответ

2 голосов
/ 05 июня 2011

Используйте Выходной класс . Из руководства пользователя:

$ this-> output-> set_status_header (code, 'text');

Позволяет вам вручную установить заголовок состояния сервера. Пример:

$this->output->set_status_header('401');
// Sets the header as: Unauthorized

Я собирался предложить расширить класс Security и переписать функцию, которая генерирует ошибку CSRF:

/**
 * Show CSRF Error
 *
 * @return  void
 */
public function csrf_show_error()
{
    //show_error('The action you have requested is not allowed.');

    // Set 401 header instead of the default 500
    show_error('The action you have requested is not allowed.', 401);
}

... но это не всегда будет правильно - И самое главное, я не думаю, что вам нужно делать это при отправке токена. Вы должны были уже отправить неавторизованный заголовок до того, как токен был даже проверен.

Из вашего комментария:

Не то, чтобы токен csrf и сеанс были напрямую связаны, но срок действия по умолчанию для обоих одинаков. Так что, если пользователь не обновил свой браузер некоторое время, а затем обновил страницу, CI возобновит сеанс и токен csrf .... но с помощью ajax, поскольку он не может обновить токен, он просто возвращает ошибку 500 ,

Если это единственное, что мешает вам проверить сеанс до токена CSRF, попробуйте установить срок действия токена сеанса на 10 секунд раньше, чем токен. Если запрос не авторизован, нет смысла проверять токен для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...