5

我不喜欢 CSRF 令牌过期时 CI 默认的行为方式。例如,当用户长时间显示登录表单并最终提交时,就会出现这个带有错误消息的丑陋空白页面。

我询问了解决这个问题的方法,有人告诉我扩展Security类,并覆盖它的csrf_show_error()方法,如下所示:

class MY_Security extends CI_Security {


    public function __construct()
    {
        parent::__construct();

    }

    public function csrf_show_error()
    {
        // comment out the default action
        // show_error('The action you have requested is not allowed.');

        // add redirect actions here
        // I'd like to use some helper function here like redirect()

    }

} 

问题是我不能,或者我不知道如何从这里访问库和帮助程序以执行重定向。我无法在此处使用get_instance()函数,因为我收到错误消息。那么,我还能做什么?或者有没有其他更好的选择来防止显示这个错误页面?

4

3 回答 3

3

像这样的核心类CI_Security在帮助程序和库之前实例化 - 无法像在 CI 应用程序中的其他地方那样利用这些功能。

您必须使用原生 PHP 函数来复制类中的功能,header()如果您只是想重定向到更漂亮的错误页面,这并不难。

于 2013-01-21T22:37:56.280 回答
3

一种方法是扩展Security类以重定向到同一页面。

CodeIgniter 用户指南 -扩展核心类

页面打开后如何处理过期的 CSRF 令牌的很好的解释

于 2016-05-17T15:22:43.087 回答
2

对于那些想要更改页面视图的人,您可以error_general.php/application/errors/error_general.php. CodeIgniter 使用该文件来显示一般错误,例如 CSRF 错误。

问候 :)。

于 2014-03-27T18:03:23.093 回答