使用 CakePHP 登录时错误的 redirectUrl

Bad redirectUrl at login with CakePHP

这是我重现问题的方法:

  1. 登录(重定向到页面 foo)
  2. 点击进入页面栏
  3. 注销
  4. 重新登录
  5. 重定向的页面是bar(应该是foo)

这就是我所做的:

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(); 来清除与我的会话相关的所有内容,但我发现了什么。

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

我找到了解决方法。我没有使用 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']);
        }
    }
}