Codeigniter показывает ошибку, когда я пытаюсь повторно отправить форму с csrf_protection, установленным на true

Мой веб-сайт CI имеет защиту csrf.

$config['csrf_protection'] = TRUE;

Итак, когда я повторно отправляю форму путем обновления, я получаю следующую ошибку.

Запрошенное вами действие не разрешено

Вместо того, чтобы показывать это сообщение, я хочу, чтобы оно вернулось на последнюю страницу.

Итак, я пытаюсь переопределить метод csrf_show_error(), расширив файл CI_Security.

Это мой класс, расположенный в application/core/My_Security.php.

class MY_Security extends CI_Security {

    public function __construct()
    {
        parent::__construct();
        $this->load->library('user_agent');
    }

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

        // force page "refresh" - redirect back to itself 
        // a page refresh restores the CSRF cookie      
        if ($this->agent->is_referral())
        {
            redirect(site_url());

        } else {            
            redirect($_SERVER['HTTP_REFERER']);         
        }        
    }
}

Я получаю следующую ошибку

Вызов библиотеки функций-членов() для не-объекта


person chandoo    schedule 02.02.2017    source источник


Ответы (2)


Вместо изменения основных классов я расширил класс MY_Securtiy в основной папке приложения. и перенаправление на предыдущую страницу.

Расположение файла: application\core\MY_Security.php

class MY_Security extends CI_Security {

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

    public function csrf_show_error()
    {
        header('Location: ' . htmlspecialchars($_SERVER['REQUEST_URI']), TRUE, 200);
    }
}
person chandoo    schedule 04.03.2017

Спасибо за ваше решение, но кажется лучше с кодом возврата 302, изменив тип запроса нового запроса на GET, независимо от типа, используемого в исходном запросе (например, POST). При следующем обновлении вопросов не будет.

person Le Moineau    schedule 28.12.2017