我正在使用CakePHP 2.0的集成Auth组件。 我有以下表格:
- 用户
- 组
- 配置文件
我的模型关系如下:
User belongsTo Group
User hasMany Profiles
登录到站点后,我注意到Auth会话仅包含用户表信息,但我也需要登录用户的组和配置文件表的信息。
有没有办法用Auth组件做到这一点?
答案 0 :(得分:6)
由于处理会话密钥的方式,AuthComponent
无法执行此操作。但是,您可以自己将其保存到会话中。
执行此操作的唯一方法是在用户登录时添加到会话中:
function login() {
if ($this->Auth->login($this->data)) {
$this->User->id = $this->Auth->user('id');
$this->User->contain(array('Profile', 'Group'));
$this->Session->write('User', $this->User->read());
}
}
然后在您beforeFilter()
的{{1}}中,为控制器保存一个var以进入:
AppController
更新:从CakePHP 2.2(announced here)开始,AuthComponent现在接受“包含”键,用于在会话中存储额外信息。
答案 1 :(得分:1)
据我所知,Auth组件只缓存来自Users模型的数据。您可以使用该信息从其他模型中检索所需数据,例如在控制器中使用它:
$group_data = $this->Group->findById($this->Auth->user('group_id'));
或者
$profile_data = $this->Profile->findByUserId($this->Auth->user('id'));
但我认为你不能直接从Auth组件中获取它,因为它不会立即缓存相关的模型数据。
答案 2 :(得分:1)
两种方式:
1)扩展FormAuthenticate类(请参阅/ Controller / Component / Auth)或您用于登录的任何内容并覆盖_findUser()方法并告诉Auth组件使用此authorize类。请参阅此页面如何完成所有http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
2)只需在模型中实现一个方法,该方法将获取您想要的所有数据,并在控制器的登录方法中调用它并将数据写入会话。 IMO使用这种方法很方便,因为有时你需要刷新会话数据。
由于您对其他答案的评论:
您必须在模型中编写一个方法和一些代码来返回数据。 CakePHP无法读取您的想法和没有代码的数据库。无论你打算使用哪种方法,你都必须编写代码。