CakePHP 2.5.2 URL在身份验证后包含两次应用程序路径

时间:2014-08-13 05:34:59

标签: cakephp redirect cakephp-2.0 cakephp-acl

我已经构建了一个简单的网站,并使用找到的here ACL指南添加了身份验证。我想我已经跟着它了。

我的问题是:
登录后,如果我尝试访问有效的URL,则会再次添加路径文件夹。 例如访问:

 projectpath/controllerpath/action

重定向到

 projectpath/projectpath/controllerpath/action

我注意到的事情:

  1. 仅在用户登录时才会发生。如果他们未登录,则会正确重定向到登录页面。
  2. 仅在控制器的页面上才会发生这种情况。如果我输入的页面不正确,则会抛出缺少控制器异常。
  3. 我公开访问的任何页面都可以正常工作。它只是那些不公开的。
  4. 修改

    今天早上我安装了CakePHP 2.5.3的新版本。然后,我手动复制除路由文件之外的所有文件。仍然得到同样的错误。

    任何可能导致此问题的想法?

    修改 我已经进步了一点。我删除了ACL组件并使用了Auth组件。

    问题似乎只发生在登录用户尝试访问未经授权的网址时。来自蛋糕

      

    属性AuthComponent::$unauthorizedRedirect   控制未经授权访问的处理。默认情况下,未授权用户被重定向到引用者URL或AuthComponent :: $ loginAction或'/'。如果设置为false,则抛出ForbiddenException异常而不是重定向。

    在我的App Controller中

        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();
    }
    

    修改 UserController

    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'));
        }
    }
    

1 个答案:

答案 0 :(得分:0)

尝试在AuthComponent初始化时添加loginAction和loginRedirect属性,如下所示:

'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起不推荐使用它。

参考此处:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html