我对 CodeIgniter 相当陌生,我正在使用 Ion Auth 进行用户授权。使用 Ion Auth 库,您可以获得如下用户对象:
$user = $this->ion_auth->get_user();
echo $user->email;
如果用户已登录,我希望 $user 对象在任何页面上都可用(在任何控制器中)。我怎样才能做到这一点?(我正在使用 CodeIgniter 2)
我对 CodeIgniter 相当陌生,我正在使用 Ion Auth 进行用户授权。使用 Ion Auth 库,您可以获得如下用户对象:
$user = $this->ion_auth->get_user();
echo $user->email;
如果用户已登录,我希望 $user 对象在任何页面上都可用(在任何控制器中)。我怎样才能做到这一点?(我正在使用 CodeIgniter 2)
我的这篇博客文章详细介绍了具体使用 Ion_Auth 来允许您的整个应用程序(包括视图)访问您当前用户的信息。
简短版...(专门针对手头的主题)
将此添加到您的MY_Controller.php
文件中
class User_Controller extends CI_Controller {
protected $the_user;
public function __construct() {
parent::__construct();
if($this->ion_auth->logged_in()) {
$data->the_user = $this->ion_auth->get_user();
$this->the_user = $data->the_user;
$this->load->vars($data);
}
else {
redirect('/');
}
}
}
然后在你的应用程序中像这样创建你的控制器
class App_Controller extends User_Controller {
public function __construct() {
parent::__construct();
}
function index() {
//do stuff
}
}
然后不仅在您的控制器中您可以访问,$this->the_user
而且您还可以$the_user
加载到每个视图中$this->load->vars()
通常你会在会话中缓存这样的东西,但是在我的大多数 CI 应用程序中我已经远离了它。
一个例子:你登录用户(缓存用户数据),然后他们去他们的个人资料页面更新他们的电子邮件。您现在必须重新加载缓存。许多其他事情可能会推动这种重新加载。通常我缓存的最多的是ID,然后我做你正在做的事情并在我需要的任何页面上获取用户的数据。
我发现有帮助的一件事是拥有基本控制器。例如,我有一个 RegisteredUserController。任何动作都需要用户登录的控制器扩展了这个。这样我就可以保持登录检查以及在一个位置(在构造函数中)获取用户数据之类的事情。例如:
class RegisteredUserController extends CI_Controller {
var $user;
function __construct() {
parent::__construct();
$this->user = $this->ion_auth->get_user();
}
}
然后任何扩展RegisteredUserController
而不仅仅是控制器的控制器都可以通过$this->user
. 遵循此模式将在每个页面(扩展控制器)上获取它,而无需使用缓存。