在CakePHP 2.x中,Auth注销不起作用

时间:2015-11-18 09:59:23

标签: cakephp session-cookies browser-cache cakephp-2.x

  1. 当我从一个用户帐户登录时,会话设置。然后在同一个浏览器上打开下一个选项卡并输入登录URL,它将我带到登录页面。但实际上它应该重定向到“仪表板”页面(在我的情况下) 。它无法重定向到我loginRedirect中提到的Auth(信息中心)页面。
  2. 当我退出时,根据我的代码会话,cookie和缓存被删除。但它不会重定向到logoutRedirect页。
  3. 我的代码:

    App控制器

    public $components = array(
      'Session', 'RequestHandler', 'Email', 'Cookie',
      'Auth' => array(
        'authenticate' => array(
          'Form' => array(
            'fields' => array(
              'username' => 'email',
              'password' => 'password')
            )
          ),
          'loginRedirect' => array(
             'controller' => 'users',
             'action' => 'login'
           ),
           'logoutRedirect' => array(
             'controller' => 'users',
             'action' => 'login'
           )
         )
       );
    

    用户控制器

    登录操作:

    public function login() {
      $this->layout = 'admin';    
        if ($this->Session->check('Auth.User')) {
          $this->redirect(array('controller' => 'users', 'action' => 'dashboard'));      
        }
        if (isset($this->data['User'])) {
          if (!empty($this->data['User']['email']) && !empty($this->data['User']['password'])) {
            if ($this->Auth->login()) {   
              $this->redirect(array('controller' => 'users', 'action' => 'dashboard'));
            } else {
              $this->set('error', "Email or Password mismatch.");
            }
          }
        } else {
          if ($this->Auth->loggedIn()) {                
            $this->redirect(array('controller' => 'users', 'action' => 'dashboard'));
          }
        }
      } 
    

    退出操作:

    public function logout() {      
      header('pragma: no-cache'); 
      header('Cache-Control: no-cache, must-revalidate'); 
      $this->response->disableCache();        
      $this->Session->delete('Auth.User');
      $this->Session->delete('User');
      $this->Session->destroy();
      $this->Cookie->destroy();
      return $this->redirect($this->Auth->logout());
    }
    

    此代码在“本地服务器”中正常工作,但在生产服务器中无效。

1 个答案:

答案 0 :(得分:1)

您的redirect语句应该在return前面,以便代码执行停止。例如:

return $this->redirect(array('controller' => 'users', 'action' => 'dashboard'));