【问题标题】:Codeigniter Hooks advanceCodeigniter Hooks 推进
【发布时间】:2012-07-10 07:16:55
【问题描述】:

您好,我正在使用 post_controller 挂钩来验证用户是否已登录 但是当验证失败时,我将用户重定向到登录控制器.... 现在的问题是,当它重定向到默认控制器时,再次调用 post_controller 钩子,并且以这种方式无限循环以重复重定向开始。 我想为除登录控制器之外的每个控制器调用 post_controller 挂钩.... 还有一种方法是我不需要一次又一次地加载会话库,因为如果用户已登录,那么它会在后控制器中加载会话库以及通过在配置文件中自动加载... 这是我的代码


    //Hooks
    $hook['post_controller'] = array(
                                'class'    => 'is_login',
                                'function' => 'index',
                                'filename' => 'is_login.php',
                                'filepath' => 'hooks'
                                ); 

//Is_Login Hook
class is_login {
function __construct(){
$this->CI =& get_instance();

    if(!isset($this->CI->session))              //Check if session lib is loaded or not
        $this->CI->load->library('session');    //If not loaded, then load it here
}

public function index()
{
    $login_id = $this->CI->session->userdata('login_id');
    $login_flag = $this->CI->session->userdata('logged_in');

       if ($login_flag != TRUE || $login_id == "")
        {
            redirect(site_url().'/welcome_login', 'refresh');

        }           
}
}

【问题讨论】:

    标签: codeigniter hook


    【解决方案1】:

    看来这里不是使用 Codeigniter 钩子的好地方。最好在应用程序中扩展 Controller 类,并在构造函数中检查用户是否已登录并重定向到登录控制器。但无需从您的控制器扩展登录控制器,而是从 CI_Controller 扩展它。

    【讨论】:

    • 我在 CI_Controller 类中放置了相同的登录名,但同样的事情发生了,因为重定向到登录控制器也是扩展 CI_Controller
    • 你的理解不同。您需要通过扩展 CI 控制器在 application/core 文件夹中创建自己的控制器类 MY_Controller 并在那里实现您的登录代码。从扩展的(MY_Controller)中扩展除登录控制器之外的所有控制器。
    • 谢谢每个人都说要将 MY_controller 保存在应用程序/库中,您正确指出将其保存在核心中,我解决了我的问题,thanx 很多
    • 如果此答案有效,请将其设为正确答案,以便其他人使用。
    【解决方案2】:

    我通过钩子验证登录没有问题。我只是在注销和exit 应用程序时生成登录视图,以便唯一显示的是登录,而控制器(和休息)被忽略。

    真的不需要重定向。

    【讨论】:

    • 由于某些原因,我不想加载登录视图,您还有其他解决方案吗
    • 仅在 uri 未登录时重定向。 $CI =& get_instance(); if ($CI->uri->segment(1) == 'login') return;
    【解决方案3】:
    if ($this->CI->uri->segment(1) != 'auth') {
    
        //Authenticate
        if (empty($user->user_id))redirect('auth');
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-01
      • 2013-08-06
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多