Codeigniter csrf过期令牌

在我的codeigniter ajax应用程序中,如果用户的会话已超时并且他们提交了ajax表单,因为csrf令牌已过期,服务器返回500错误…如何让服务器返回401错误,以便我可以至少处理错误并将用户重定向到登录表单? 最佳答案 使用
Output class.从用户指南:

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

Permits you to manually set a server status header. Example:

$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);
}

……但这并不总是正确的 – 最重要的是,我认为在提交令牌时你不需要这样做.在令牌验证之前,您应该已经发送了未经授权的标头.

来自你的评论:

It’s not that the csrf token and the session are directly related but the default expiration of both are the same. So if the user hasn’t refreshed their browser in a while, and then refreshes the page, CI will renew the session and the csrf token…. but with ajax, since it cant refresh the token, it just returns the 500 error.

如果这是阻止您在CSRF令牌之前验证会话的唯一因素,请尝试将会话令牌设置为比令牌早10秒到期.如果请求是未经授权的,那么开始验证令牌是没有意义的.

点赞