如果未登录codeigniter,如何防止用户访问某些页面

时间:2018-11-05 06:59:59

标签: php codeigniter login codeigniter-3

当前,如果我访问的主用户/订户能够在未登录时查看页面,我已经在主控制器中创建了一个功能-有关代码的说明,请参考User role page redirect codeigniter

public function subscriber() {

    $this->load->view('header', $data);
    $this->load->view('dashboard/subscriber', $data);
    $this->load->view('footer');
    }

3 个答案:

答案 0 :(得分:1)

根据用户是否登录来保护不同路由的最简单方法是使用会话变量。 当用户登录您的应用时,然后设置像这样的sessio变量

$this->session->set_userdata('is_logged_in', TRUE);

并在控制器的构造函数中检查该变量,以便在调用任何方法之前验证用户。

class Demo_controller extends CI_Controller{
 public function __construct(){
   parent::__construct();
   // check if user is logged in
   if(!$this->session->userdata('is_logged_in')){
     // user is not logged in then redirect user to any page you want
   }
 }
}

您还可以使用钩子在Codeigniter中创建此类系统

答案 1 :(得分:0)

您需要保护您的页面。假设仅在用户登录时设置$_SESSION['email']变量。我们可以将其用作标志来确定用户是否登录。

将这些功能添加到您的User_model(确保模型已自动加载)。

public function is_logged() {
     if (is_null($this->session->userdata('email')) {
         redirect('main/login');
         exit; // just in case
     }
}

public function is_allowed($perm) {
     $roles = $this->session->userdata('roles');
     if ($roles !== 'admin' && $perm !== $roles) {
         // maybe set flashdata so user knows why they were redirected
         redirect('main/' . $roles);
         exit; // just in case
     }
}

然后是控制器:

class Subscriber extends CI_Controller {

    public function construct() {
        parent::__construct();
        $this->user_model->is_logged(); // can merge with below func, just make sure it is called first (!imp)
        $this->user_model->is_allowed('subscriber');
    }

    public function subscriber() {
        $this->load->view('header', $data);
        $this->load->view('dashboard/subscriber', $data);
        $this->load->view('footer');
    }
}

这是最基本的。如果您愿意,可以更喜欢它。我个人使用基于数据库的ACL系统。

还要考虑在数据库和其他地方将roles重命名为role,考虑到用户只有1个角色(考虑到您先前的问题),这令人困惑。

答案 2 :(得分:0)

如果您想防止用户未登录codeigniter而访问某些页面,

您应该先登录set_userdata才能登录。

按如下所示更改控制器。如果会话数据不为空,它将把您重定向到特定页面。否则,“写出需要做什么”。

public function subscriber()
    {
        if($this->session->userdata('id')!="")
        {
            $this->load->view('header', $data);
            $this->load->view('dashboard/subscriber', $data);
            $this->load->view('footer');

        } else {
            //your code here
        }           
    }