1

我对 CodeIgniter 相当陌生,我正在使用 Ion Auth 进行用户授权。使用 Ion Auth 库,您可以获得如下用户对象:

  $user = $this->ion_auth->get_user();
  echo $user->email;

如果用户已登录,我希望 $user 对象在任何页面上都可用(在任何控制器中)。我怎样才能做到这一点?(我正在使用 CodeIgniter 2)

4

2 回答 2

6

我的这篇博客文章详细介绍了具体使用 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()

于 2011-03-15T20:12:51.933 回答
2

通常你会在会话中缓存这样的东西,但是在我的大多数 CI 应用程序中我已经远离了它。

一个例子:你登录用户(缓存用户数据),然后他们去他们的个人资料页面更新他们的电子邮件。您现在必须重新加载缓存。许多其他事情可能会推动这种重新加载。通常我缓存的最多的是ID,然后我做你正在做的事情并在我需要的任何页面上获取用户的数据。

我发现有帮助的一件事是拥有基本控制器。例如,我有一个 RegisteredUserController。任何动作都需要用户登录的控制器扩展了这个。这样我就可以保持登录检查以及在一个位置(在构造函数中)获取用户数据之类的事情。例如:

class RegisteredUserController extends CI_Controller {
    var $user;

    function  __construct()  {
        parent::__construct();
            $this->user = $this->ion_auth->get_user();
        }
}

然后任何扩展RegisteredUserController而不仅仅是控制器的控制器都可以通过$this->user. 遵循此模式将在每个页面(扩展控制器)上获取它,而无需使用缓存。

于 2011-03-15T19:19:17.470 回答