我正在使用cakephp 2.4.7进行开发,我使用auth组件进行多次登录(用户和公司登录)。
我的目标是在sessionKey
中设置正确的beforeFilter
(Auth.User或Auth.Company)。 Auth.User
是cakephp中的默认值。
AppController的:
public $helpers = array('Cache','Html','Session','Form');
public $components = array(
'Security',
'Cookie',
'RequestHandler',
'DebugKit.Toolbar',
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'users',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'authError' => 'You must be loggedin to view this page.',
'loginError' => 'Invalid user credentials.',
'authorize' => array('Controller')
)
);
public function beforeFilter() {
$this->Auth->deny('*');
}
CompaniesController:
public function beforeFilter() {
parent::beforeFilter();
AuthComponent::$sessionKey = 'Company';
//$this->Auth->sessionKey = 'Auth.Company';
$this->Auth->authenticate = array(
'Form' => array(
'userModel' => 'Company', // set the new userModel
'fields' => array('username' => 'email')
)
);
$this->Auth->allow('register', 'login', 'logout');
}
登录工作正常,但验证会话仍为Auth.User
。 (经debug($this->Auth->User());
测试)
我做错了什么?如何正确设置AuthComponent::$sessionKey
?
答案 0 :(得分:2)
今天我遇到了同样的问题,我已经跳到代码(here)来检查它为什么不适合我。
似乎你必须像这样设置它
public function beforeFilter()
{
AuthComponent::$sessionKey = 'Auth.Company'; // static property so we have to
// access in static way so you want get strict errors
...
}
然后再次注销并登录用户。在您的操作中只需 var_dump()或 pr() $ this->会话 - >读取('验证')
Btw $ this-> Auth-> user()将始终通过[$ sessionKey]返回Auth中的数组,并为AuthComponent :: user()静态调用返回相同的数据。