2014-02-06 24 views
0

我已经在Cake中实现了身份验证和授权,并且大多数情况下它可以根据需要运行。 但是,如果我从需要特定凭据(如/ admin)的页面登出并以另一个不同特权的用户身份重新登录,则会重定向到/ admin并显示错误消息。CakePHP:登录时,重定向到注销前的最后一页查看

查看chrome中的请求标头,我注意到cookie CAKEPHP在注销后仍然设置。

public function login() { 
    ... 
     if ($this->Auth->login()) { 
       $this->set('login_failed', false); 
     return $this->redirect($this->Auth->redirect()); 
    } else { 
    ... 
    } 
} 


public function logout() { 
    return $this->redirect($this->Auth->logout()); 
} 

有关如何解决此问题的任何想法?

回答

1

分配给你的AppController的

public $components = array(    
     'Auth'=> array(    
      'logoutRedirect' => array('controller' => 'users', 'action'=>'login'), 
      'loginRedirect' => array('controller' => 'users', 'action' => 'login') 
     ) 
) 

您的注销功能也是不正确。你应该这样做:

public function logout(){ 
     $this->Auth->logout();     
     $this->redirect($this->Auth->loginAction); 
} 

loginRedirect

logoutRedirect

+0

谢谢,这很有效。你能告诉我这到底是什么吗?即使没有这些,在注销后我会被重定向到正确的页面,所以重定向显然不是它唯一的作用。 此外,当第一次登录时,会显示AuthError消息。有关于此的任何想法? – nishantjr

+0

嗯...我不太明白什么loginAction,loginRedirect和logoutAction是完全一样的。 – nishantjr

+0

我附加了更多信息阅读Auth组件以查看Auth行为如何工作:)并不错。希望能帮助到你。 – Fury

0

不确定您使用的是哪个版本的蛋糕,但您可以尝试取消设置cookie,并使其不会进入上次查看的页面。您可以将其添加到注销或beforefilter()。

0

它可能取决于CakePHP版本。

但你可以尝试:

$this->Session->delete('Auth.redirect');

这是工作在CakePHP的2.x的

+0

我宁愿整个会话在注销时被破坏,但我认为这应该是默认行为 – nishantjr

+0

注销后Auth.redirect应该从会话中清除,但它会保留在尝试访问需要验证的页面并将您重定向到登录页面时进入会话。也许你的'$ Auth-> logoutRedirect'不正确? – noslone

+0

谢谢你的工作,我评论过艾萨克的回答 – nishantjr

0

是admin前缀?如果是这样,请尝试在admin视图中将admin设置为false以便注销链接。

相关问题