我做了一个简单的 cakephp 应用程序。目前我只是在使用 auth 组件来根据他们将用户发送到他们各自的页面。例如,如果角色 = 1 发送到管理页面,否则如果角色 = 2 将其发送到版主页面。我同时使用会话和身份验证组件来查看它们如何工作并在其中保存数据。下面是用户控制器登录操作的代码
public function login(){
$this->Session->setFlash($this->Auth->user('role'));//checks for data in auth component if any
if($this->request->is('post') ){
$results = $this->User->findByEmail($this->request->data['User']['username']);
if($results &&$results['User']['password']== md5($this->request->data['User']['password']))
{
$this->Session->write('user',$results['User']);
$this->Auth->login($results['User']);
$this->Session->setFlash('User logged in successfully'.$this->Auth->user('role'));
return $this->redirect($this->Auth->redirect());
}
else
{
$this->Session->setFlash('Login is incorrect');
}
}
}
问题是登录工作正常,所有数据都存储在 session 和 auth 变量中,但 loginredirect 的行为很奇怪。在我的 chrome 浏览器中。无论角色是什么,它总是重定向到管理页面,但它正在闪烁我在 flash 中设置的正确消息。appcontroller中beforefilter的代码
public function beforeFilter(){
$this->Auth->allow('display');
$this->Auth->loginAction = array('controller' => 'Users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'Users', 'action' => 'login');
if($this->Auth->user('role') == '1'){
$this->Session->setFlash($this->Auth->user('role').'adminnnnnnnnnnnnnnnnnnnnn');
$this->Auth->loginRedirect = '/admins/index';
}
if($this->Auth->user('role') == '2'){
$this->Session->setFlash('moderatorrrrrrrrrrrrrrrrr');
$this->Auth->loginRedirect = '/users/index';
}
}
所以问题是循环在过滤器之前运行良好,setflash 显示用户是管理员还是版主,但由于某种原因,无论谁登录,它都只会重定向到管理员/索引页面或用户/索引页面的单个页面。这是 chrome 浏览器上的行为。在 Firefox 上,loginredirects 将用户发送到 webroot/index 页面,但 Flash 消息再次正确。
我不确定我做错了什么是我的代码有问题还是 cakephp 2.0 auth 组件有测量错误。