cakephp auth loginRedirect

时间:2014-11-04 09:18:36

标签: php cakephp

我需要在这里编辑loginredirect会话参数,以便它作为管理员或用户重定向到不同的页面......事情是。索引硬编码,它将始终重定向到普通用户索引视图忽略我的代码重定向管理员用户。我想要它,以便如果当前用户是管理员,它将重定向到admin_index而不是

appControler

public $components = array(
        'Session',
        'Auth' => array(
            'loginRedirect' => array(
                'controller' => 'users',
                'action' => 'index'
            ),
            'logoutRedirect' => array(
                'controller' => 'users',
                'action' => 'login'
                ),
             'authenticate' => array(
                'Form' => array(
                    'passwordHasher' => 'Blowfish'
                )
            )
        )

    );

用户控制器登录功能

public function login() {
    if($this->Auth->user('account_type')=='admin'){
        return $this->Auth->loginRedirect = array('controller' => 'users', 
        'action' => 'admin_index');
    }
    elseif($this->Auth->user('account_type')=='user'){
        return $this->Auth->loginRedirect = array('controller' => 'users',
        'action' => 'view');
    }
    else {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        }
        $this->Session->setFlash(__('Invalid username or password, try again'));
    }
}

3 个答案:

答案 0 :(得分:1)

从CakePHP文档,关于$ loginRedirect: http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#AuthComponent :: $ loginRedirect

  

如果用户在其会话中具有Auth.redirect值,则将忽略此值。

所以你的$this->Auth->loginRedirect被忽略了。您可以将此逻辑移动到beforeFilter()回调并在那里设置$this->Auth->loginRedirect,或者您可以手动重定向用户。

public function login() {
    if($this->Auth->user('account_type')=='admin'){
       return $this->redirect(array('controller' => 'users', 'action' => 'admin_index'));
    }
    elseif($this->Auth->user('account_type')=='user'){
        return $this->redirect(array('controller' => 'users', 'action' => 'view'));
    }
    else {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        }
        $this->Session->setFlash(__('Invalid username or password, try again'));
    }
}

答案 1 :(得分:0)

更改退货$ this->重定向($ this-> Auth-> redirect());到

return $this->redirect($this->Auth->redirectUrl());

您的问题是您返回管理员的网址但从未真正重定向。

或者,您可以将字符串或数组格式中的所需网址添加到$ this-> Auth-> redirectUrl()

答案 2 :(得分:0)

如果身份验证错误,重定向到错误的网址时,我遇到了同样的问题。所以我尝试下面的代码登录功能,它适用于我。

$user = $this->Users->newEntity();
    $this->set('user', $user);

    if ($this->request->is('post')) {
        $user = $this->Auth->identify();
        if ($user){
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
        }else{
            $this->Flash->error(__('Invalid username or password, try again')); 
        }
    }