Codeigniter 3登录检查功能未显示正确的flashdata消息

时间:2015-11-20 23:15:58

标签: codeigniter codeigniter-hmvc

我正在创建登录检查功能。但我的两条闪存数据信息设置不正确。

  1. 如果用户已登录,如果会话过期,则应设置此项 闪存数据消息您的会话令牌已过期!
  2. 如果用户尚未登录并尝试访问未登录的控制器 然后它应该设置此flashdata消息您需要登录 访问此网站!
  3. 由于某种原因,它始终显示第二个flashdata消息。

      

    问题:我如何正确使用这两个flashdata消息。

    控制器: Login.php 功能:检查

    public function check() {
        $uri_route = basename($this->router->directory) .'/'. $this->router->fetch_class();
    
        $route = isset($uri_route) ? $uri_route : '';
    
            $ignore = array(
                'common/login',
                'common/forgotten',
                'common/reset'
            );
    
            if (!in_array($route, $ignore)) {
    
                // $this->user->is_logged() returns the user id
    
                if ($this->user->is_logged()) {
    
                    // $this->session->userdata('is_logged') returns true or false
    
                    if (!$this->session->userdata('is_logged')) {
    
                        // Redirects if the user is logged on and session has expired!
    
                        $this->session->set_flashdata('warning', 'Your session token has expired!');
    
                        redirect('admin/common/login');
                    }
    
                } else {
    
                    $this->session->set_flashdata('warning', 'You need to login to access this site!');
    
                    redirect('admin/common/login');
    
                }
        }
    

    我通过codeigniter钩子运行函数,这样我就不必在每个控制器上添加它。

    $hook['pre_controller'] = array(
            'class'    => 'Login',
            'function' => 'check',
            'filename' => 'Login.php',
            'filepath' => 'modules/admin/controllers/common'
    );
    

1 个答案:

答案 0 :(得分:1)

你想通过uri()检查什么实际上是一种非常糟糕的检查方式,你也应该将登录检查作为一个构造函数而不是单一的..这是你的函数应该是什么样的:

    function __construct()
    {
        parent::__construct();
        if (!$this->session->userdata('logged_in')) {
        // Allow some methods?
            $allowed = array(
                'some_method_in_this_controller',
                'other_method_in_this_controller',
            );
            if (!in_array($this->router->fetch_method(), $allowed)
            {
            redirect('login');
           }
        }
    }