认证后,CakePHP 2.5.2 URL包含两次应用程序路径
我已经建立了一个简单的网站,并使用找到的ACL指南添加了身份验证。我想我已经一丝不苟了 我遇到的问题是:认证后,CakePHP 2.5.2 URL包含两次应用程序路径,cakephp,redirect,cakephp-2.0,cakephp-acl,Cakephp,Redirect,Cakephp 2.0,Cakephp Acl,我已经建立了一个简单的网站,并使用找到的ACL指南添加了身份验证。我想我已经一丝不苟了 我遇到的问题是: 登录后,如果我尝试访问有效的url,将再次添加路由文件夹。 e、 g.访问: projectpath/controllerpath/action 重定向到 projectpath/projectpath/controllerpath/action 我注意到的事情: 只有用户登录时才会发生这种情况。如果他们没有正确登录,请重定向到登录页面 只有在作为控制器的页面上才会发生这种情况。如果
登录后,如果我尝试访问有效的url,将再次添加路由文件夹。 e、 g.访问:
projectpath/controllerpath/action
重定向到
projectpath/projectpath/controllerpath/action
我注意到的事情:
AuthComponent::$UnauthorizedDirect
控制未经授权访问的处理。默认情况下,未经授权的用户被重定向到引用者URL或AuthComponent:$loginAction或“/”。如果设置为false,则会引发一个禁止的异常,而不是重定向
在我的应用程序控制器中
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')
)
);
这是可行的(因为它根本不重定向)。是否有人能解释如何根据文档将未经授权的重定向到正确的路线
编辑
这是我的应用程序控制器中的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'));
}
}
编辑用户控制器
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'));
}
}
尝试在AuthComponent初始化中添加loginAction和LoginDirect属性,如下所示:
'Auth' => array(
'loginAction' => array('admin' => false, 'controller' => 'users', 'action' => 'login'),
'loginRedirect' => array('admin' => false, 'controller' => 'pages', 'action' => 'index'), // redirected here after login success
'logoutRedirect' => array(
'controller' => 'user',
'action' => 'login',
'home'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
), ...
此外,AuthComponent::redirectUrl是一种方法,而不是一个属性,自v2.3以来,它已被弃用
参考此处:您想根据特定条件重定向到不同的页面,还是每次都要转到同一页面(例如,未经授权的请求会将用户重定向到主页)?我已经添加了我的beforeFilter,我正试图使用它根据角色进行路由-如果可能的话,我想根据角色进行重定向。此beforeFilter适用于他们登录时,但是他们仍然被重定向到引用URL。如何将“authorize”属性从“Session”移动到“Auth”(我认为这就是它应该去的地方),并将beforeFilter()方法中的代码改为isAuthorized($user)方法?谢谢您的帮助。我将Authorize移动到Auth,出现以下错误
未找到身份验证适配器“Authorize”。
我可以将其完全删除,不会产生任何不良影响。根据你的想法,我删除了上面的beforefilter文本,并将其添加到我的UserController中。你能解决这个问题吗?面临类似问题->