我正面临这个奇怪的问题。我试图从普通用户的角色更改admin角色的默认loginRedirect。
你在AppController的组件变量中设置了auth键,如下所示:
'Auth' => array(
'loginRedirect' => array(
'controller' => 'donors',
'action' => 'index'
)
)
现在在beforeFilter回调中我设置了这个:
if($this->Auth->user('role') == 'admin'){
$this->Auth->loginRedirect = array(
'controller'=>'users',
'action'=>'admin_index',
'prefix'=>'admin',
'admin'=>true
);
}
但是,这不起作用,if条件永远不会满足。我希望在用户登录时运行。如果我添加else
条件并重复上面显示的相同代码,它就可以工作,管理员会重定向到所需的页面。
任何人都可以指导我如何正确地执行此操作吗?提前致谢
答案 0 :(得分:1)
如果用户未登录,$this->Auth->user()
将返回null。 beforeFilter()将在任何操作运行之前运行,因此仍未调用login()操作。
调用$this->Auth->login()
后重定向并成功。例如。在您的UsersController::login()
操作中(或您用于登录的任何操作):
if ($this->Auth->login()) {
if($this->Auth->user('role') == 'admin') {
$this->redirect(array(
'controller'=>'users',
'action'=>'admin_index',
'prefix'=>'admin',
'admin'=>true
);
}
}
答案 1 :(得分:0)
而不是$this->Auth->loginRedirect
使用$this->redirect(
array('controller' => 'users', 'action' => 'admin_index');
它不太复杂