Php 检查用户是否在整个应用程序中登录
我正在使用ion_auth,我需要检查用户是否已登录。ion auth提供函数Php 检查用户是否在整个应用程序中登录,php,codeigniter,Php,Codeigniter,我正在使用ion_auth,我需要检查用户是否已登录。ion auth提供函数$this->ion\u auth->logged\u in(),因此我检查如下: if (!$this->ion_auth->logged_in()) { redirect('auth/login'); } 但是我在控制器的所有功能中都发布了这个。如何让它到处检查?最简单的方法是在\u构造中调用函数一次 public function __construct() { parent
$this->ion\u auth->logged\u in()
,因此我检查如下:
if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
}
但是我在控制器的所有功能中都发布了这个。如何让它到处检查?最简单的方法是在
\u构造中调用函数一次
public function __construct()
{
parent::__construct();
if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
} //if not logged in redirect, for all sections
}
这将使它在所有的功能上工作。您还可以扩展core,使其在所有控制器上工作application/core/MY_Login.php
<?php
class MY_Login extends CI_Output {
function check_login(){
if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
} //if not logged in redirect, for all sections
}
}
创建一个核心控制器,核心控制器将有一个构造函数,您将在那里进行检查。现在,所有控制器都需要扩展核心控制器,而不是CI控制器。其内容如下:
application/controllers/your_controller.php
class Your_controller extends MY_Controller{
function __construct(){
parent::__construct();
}
}
class MY_Controller extends CI_Controller{
function __construct(){
parent::__construct();
if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
}
}
}
application/core/MY_Controller.php
class Your_controller extends MY_Controller{
function __construct(){
parent::__construct();
}
}
class MY_Controller extends CI_Controller{
function __construct(){
parent::__construct();
if (!$this->ion_auth->logged_in()) {
redirect('auth/login');
}
}
}
对每个控制器执行此操作将在每次有人访问任何页面时运行此功能,因此请确保对其进行更改,使其在您希望的区域中具体工作。现在如果你也在登录页面上,它会重定向你。要么让登录页面不扩展核心控制器(不推荐),要么在函数周围添加另一个if()语句。虽然您可以创建自己的控制器,就像从CI_控制器派生的MY_控制器一样,但这并不是它的用途
CodeIgniter支持称为钩子的东西,钩子是在特定时刻运行的脚本,非常类似于事件。存在一个钩子,每次调用任何控制器时都会调用它,而不必在控制器本身中实现任何东西
阅读更多内容您可以将其添加到构造函数中并扩展该类。这里的更多信息:虽然将其放入控制器构造函数中不是一件坏事,但以这种方式扩展核心通常不是一个好主意,主要是因为不需要派生。这是我想要听到的答案。