localhost перенаправил вас слишком много раз. в кодеигнитуры

php .htaccess redirect hook codeigniter-3

2221 просмотра

1 ответ

Я работаю над проектом codeigniter. Я хочу создать хук, чтобы он проверял логин пользователя каждый раз, когда он загружал класс. мой крюк

$hook['post_controller_constructor'] = array(
        'class'    => 'Auth_login',
        'function' => 'is_logged_in',
        'filename' => 'Auth_login.php',
        'filepath' => 'hooks',
);

а также включен в конфигурационном файле.

/**
* Auth_login
*/
class Auth_login
{
    /**
     * loading the CI instance
     * @var [object]
     */
    private $CI;

    public function __construct()
    {
        $this->CI =& get_instance();
        $this->CI->load->library('session');
        $this->CI->load->helper('url');
    }

    /**
     * Check the enduser for login verify, every time when the enduser
     * loads the controller.
     */
    public function is_logged_in() 
    {
        /**
        *  if end user is not logged in, redirect to the login page
        */  
        if(!$this->CI->session->userdata('is_logged_in')) 
        {
            $this->CI->session->set_tempdata('faliure','Please sign in to continue');
            redirect(site_url('login/index'));
        }
    }
}

Он проверяет, авторизован ли сеанс для конечного пользователя. Если пользователь не вошел в систему, перенаправьте на страницу входа. Вот мой контроллер, куда он перенаправляет

class Login extends CI_Controller {
    // class constructor
    //    public function __construct() {
    //     parent::__construct();
    //         // load default 
    //     $this->load->model('login_model');
    // }

    /**
     * [display the login page, and verify the login page using "form_validation" for server side validation]
     * @return [redirect] [description]
     */
    public function index() 
    {
        $this->load->model('login_model');
        // on form sumbit
        $on_sumbit = $this->input->post('verify');
        if(isset($on_sumbit)) 
        {
            // server side validation for login
           if ($this->form_validation->run('login/login_verify') == FALSE)
            {
                $this->load->view('login');
            }
            else 
            {
                // get the form post value
                $user_name = $this->input->post('user_name');
                $password = $this->input->post('password');
                // verify login
                $verified = $this->login_model->login_verify($user_name,$password);
                if($verified)  // success
                {
                    redirect('dashboard');
                }
                else // failure
                {
                    $this->session->set_flashdata('login_failure','Please check your email and password and try again');
                    redirect('login/index');
                }
            }
        }
        // login page
        $this->load->view('login');
    }

    // delete active session
    public function logout() 
    {
        $this->session->sess_destroy();
        redirect('login');
    }
}

Когда он перенаправляет на контроллер входа в систему, он показывает ошибки, например, поскольку он работает в локальной системе « localhost перенаправлял вас слишком много раз », что является реальной проблемой с этим. Любая помощь будет оценена.

Автор: Rakesh Источник Размещён: 08.11.2019 10:55

Ответы (1)


0 плюса

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

/**
* Auth_login
*/
class Auth_login
{
    /**
     * loading the CI instance
     * @var [object]
     */
    private $CI;

    public function __construct()
    {
        $this->CI =& get_instance();
        $this->CI->load->library('session');//working with sessions - you want sessions 
        //to be loaded ASAP so better way would be having it in 
        //APPPATH.'config/autoload.php' instead in all classes

        /** 
         * @tutorial how to exclude hook interaction with particular class/controller
         */
        if ( strtolower( $this->CI->router->class ) == 'login' )
        {
            return;
        }

        $this->CI->load->helper('url');
    }

    /**
     * Check the enduser for login verify, every time when the enduser
     * loads the controller.
     */
    public function is_logged_in() 
    {
        /**
        *  if end user is not logged in, redirect to the login page
        */  
        if(!$this->CI->session->userdata('is_logged_in')) 
        {
            $this->CI->session->set_tempdata('faliure','Please sign in to continue');
            redirect(site_url('login/index'));
        }
    }
}
Автор: Tpojka Размещён: 20.08.2016 01:34
Вопросы из категории :
32x32