使用CakePHP登录时出现错误的redirectUrl

时间:2015-07-16 18:11:38

标签: php cakephp cakephp-3.0

这是我为重现我的问题所做的:

  1. 登录(页面foo的重定向)
  2. 点击并转到页栏
  3. 注销
  4. 再次登录
  5. 重定向的页面是bar(应该是foo)
  6. 这就是我所做的:

    AppController.php

    $this->loadComponent('Auth', [
        'authorize' => ['Controller'],
        'loginRedirect' => [
            'controller' => 'Dashboard',
            'action' => 'index'
        ]
    ]);
    

    UsersController.php

    public function login($reset = null) {
        $this->layout = 'login';
        $this->set('reset', $reset);
    
        if ($this->request->is('post')) {
    
            $user = $this->Auth->identify();
    
            if ($user) {  
                // IMPORTANT!
                // Here I'm setting a different redirect url. The book says
                // that $this->Auth->redirectUrl() will read the Auth.redirect
                // session. I wanted my admin to login into a different page  
                if($session->read('Auth.User.role_id') === 3) {
                    $session->write('Auth.redirect', '/users/system_administrator_index');
                }
    
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
    
            } else {
                $this->Flash->error('Oops', ['key' => 'auth']);
            }
        }
    }
    
    public function logout() {        
        return $this->redirect($this->Auth->logout());
    }
    

    我尝试使用$session->destroy();来清除与我的会话相关的所有内容,但我注意到了。

    每次我重试登录时,服务器会将我重定向到我上次连接时访问的最后一页。

1 个答案:

答案 0 :(得分:0)

我找到了解决方法。我没有使用return $this->redirect($this->Auth->redirectUrl());,而是进行手动重定向。

public function login($reset = null) {
    $this->layout = 'login';
    $this->set('reset', $reset);

    if ($this->request->is('post')) {
        $user = $this->Auth->identify();

        if ($user) {
            $this->Auth->setUser($user);

            if($user['role_id'] === 3){
                return $this->redirect('/users/system_administrator_index');
            }

            return $this->redirect('/dashboard');
        } else {
            $this->Flash->error('Oops', ['key' => 'auth']);
        }
    }
}