我正在使用CakePHP 2.0的集成Auth組件。 我有以下表格:
- 用戶
- 組
- 簡介
我的模型關係如下:
User belongsTo Group
User hasMany Profiles
登錄至該網站,我注意到Auth會話只包含用戶表信息,但我也需要登錄用戶的組和配置文件表的信息。
有什麼辦法可以用Auth組件做到這一點嗎?
我正在使用CakePHP 2.0的集成Auth組件。 我有以下表格:
- 用戶
- 組
- 簡介
我的模型關係如下:
User belongsTo Group
User hasMany Profiles
登錄至該網站,我注意到Auth會話只包含用戶表信息,但我也需要登錄用戶的組和配置文件表的信息。
有什麼辦法可以用Auth組件做到這一點嗎?
由於處理會話密鑰的方式,無法使用AuthComponent
來執行此操作。但是,您可以將它自己保存到會話中。
做到這一點的唯一方法是添加到會話時,在用戶登錄:在您的AppController
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()
,節約無功的控制器去:
function beforeFilter() {
$this->activeUser = $this->Session->read('User');
}
// and allow the views to have access to user data
function beforeRender() {
$this->set('activeUser', $this->activeUser);
}
更新:從CakePHP 2開始。2(announced here),AuthComponent現在接受'包含'鍵來存儲會話中的額外信息。
據我所知,Auth組件只緩存用戶模型中的數據。您可以使用該信息來從其他型號檢索所需的數據,例如通過在你的控制器使用此:
$group_data = $this->Group->findById($this->Auth->user('group_id'));
或者
$profile_data = $this->Profile->findByUserId($this->Auth->user('id'));
但我不認爲你可以得到它直接使用Auth組件,因爲它不會將相關模型數據從框中緩存。
我需要通過網站的所有信息,所以只能從AUTH嘗試。所以不希望寫一個查詢查詢.. :) – AnNaMaLaI 2012-03-20 13:40:31
兩種方式:
1)擴大FormAuthenticate類(見/控制器/分量/驗證)或任何用於登錄並覆蓋_findUser()方法,並告訴驗證組件使用這個授權類。看到這個頁面如何做到這一切http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html
2)簡單地在模型中實現一個方法,將獲取所需的所有數據,並在控制器的登錄方法中調用它並將數據寫入會話。國際海事組織擁有這樣的方法很方便,因爲有時你需要刷新會話數據。
因爲對方的回答您的評論的:
你必須寫一個方法和一個模型,將返回數據的一些代碼。沒有代碼,CakePHP無法讀取您的想法和數據庫。無論您使用哪種建議方式,您都必須編寫代碼。
在會話中設置用戶時出現警告字。即使在用戶不再被認證之後,會話數據仍然可以保持設置。您需要確保在註銷時刪除Session數據。您只需將會話保存爲「Auth.User」而不是「User」即可完成此操作。 +1用於更新您提供CakePHP 2.2更新的答案。 – drmonkeyninja 2012-12-19 09:31:18