我是CodeIgniter的新手,我正在使用Ion Auth进行用户授权。使用Ion Auth库,您将获得一个用户对象,如:
$user = $this->ion_auth->get_user();
echo $user->email;
如果用户已登录,我希望$ user对象在任何页面上(在任何控制器中)都可用。我怎样才能做到这一点? (我正在使用CodeIgniter 2)
答案 0 :(得分:6)
This blog post of mine详细介绍了使用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()
加载到每个视图中
答案 1 :(得分:2)
通常你会在会话中缓存这样的东西,但是我在大多数CI应用程序中已经远离了这个。
示例:您将用户登录(缓存用户数据),然后他们将在他们的个人资料页面上更新他们的电子邮件。您现在必须重新加载缓存。许多其他事情可能会推动重新加载。通常我更多的缓存是ID,然后我做你正在做的事情,并在我需要的任何页面上获取用户的数据。
我发现有一件事有帮助就是拥有base controllers。例如,我有一个RegisteredUserController。任何需要用户登录的操作的控制器都会扩展此操作。这样我可以保持登录检查和诸如将用户数据放在一个位置(在构造函数中)之类的事情。例如:
class RegisteredUserController extends CI_Controller {
var $user;
function __construct() {
parent::__construct();
$this->user = $this->ion_auth->get_user();
}
}
然后,任何扩展RegisteredUserController
而不仅仅是控制器的控制器都可以通过$this->user
转到用户。遵循这种模式将在每个页面(扩展控制器)上获得它,而无需借助缓存。