我已经建立了一个简单的网站,并使用此处找到的 ACL 指南添加了身份验证。我想我已经信守承诺了。
我遇到的问题是:
登录后,如果我尝试访问有效的 url,则会再次添加路由文件夹。例如访问:
projectpath/controllerpath/action
重定向到
projectpath/projectpath/controllerpath/action
我注意到的事情:
- 只有当用户登录时才会发生这种情况。如果他们没有登录,它会正确重定向到登录页面。
- 只有在作为控制器的页面上才会发生这种情况。如果我输入了错误的页面,它会抛出 Missing Controller 异常。
- 我允许公众访问的任何页面都可以正常工作。只有而且只有那些不公开的。
编辑:
今天早上我安装了一个新版本的 CakePHP 2.5.3。然后我手动复制了所有文件,不包括路由文件。仍然得到同样的错误。
有什么想法可能导致这种情况吗?
编辑: 我在这方面进步了一点。我删除了 ACL 组件并使用了 Auth 组件。
该问题似乎仅在登录用户尝试访问未经授权的 url 时发生。从蛋糕
property
AuthComponent::$unauthorizedRedirect
控制对未授权访问的处理。默认情况下,未经授权的用户被重定向到引用 URL 或 AuthComponent::$loginAction 或“/”。如果设置为 false,则抛出 ForbiddenException 异常而不是重定向。
在我的应用控制器中
public $components = array(
'DebugKit.Toolbar',
'Auth' => array(
'redirectUrl' => array(
'controller' => 'pages',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'user',
'action' => 'login',
'home'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
),
'unauthorizedRedirect'=> false,// I have added this line
'Session',
'authorize' => array('Controller')
)
);
这是有效的(因为它根本不重定向)。谁能根据文档解释如何将未经授权的重定向到正确的路线?
编辑 这是我在 App Controller 中的 beforeFilter
public function beforeFilter() {
$this->Auth->allow('display');
/*if($this->Auth->user('role') == 'apa'){
$this->Auth->redirectUrl = "/apa";
}else{
$this->Auth->redirectUrl = "/test";
}*/ //Moved logic to UserController
parent::beforeFilter();
}
编辑用户控制器
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
if($this->Auth->user('role') == 'apa'){
$this->Auth->redirectUrl = "/apa";
}else{
$this->Auth->redirectUrl = "/test";
}
return $this->redirect($this->Auth->redirectUrl);
}
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}