Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/cakephp/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
认证后,CakePHP 2.5.2 URL包含两次应用程序路径_Cakephp_Redirect_Cakephp 2.0_Cakephp Acl - Fatal编程技术网

认证后,CakePHP 2.5.2 URL包含两次应用程序路径

认证后,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 我注意到的事情: 只有用户登录时才会发生这种情况。如果他们没有正确登录,请重定向到登录页面 只有在作为控制器的页面上才会发生这种情况。如果

我已经建立了一个简单的网站,并使用找到的ACL指南添加了身份验证。我想我已经一丝不苟了

我遇到的问题是:
登录后,如果我尝试访问有效的url,将再次添加路由文件夹。 e、 g.访问:

 projectpath/controllerpath/action
重定向到

 projectpath/projectpath/controllerpath/action
我注意到的事情:

  • 只有用户登录时才会发生这种情况。如果他们没有正确登录,请重定向到登录页面
  • 只有在作为控制器的页面上才会发生这种情况。如果我输入了错误的页面,它将抛出丢失的控制器异常
  • 我给公众访问的任何页面都可以。只有而且只有那些不公开的
  • 编辑:

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

    你知道这是什么原因吗

    编辑: 我在这方面取得了一些进展。我删除了ACL组件并使用了Auth组件

    只有登录用户试图访问未经授权的url时,才会出现此问题。蛋糕

    属性
    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中。你能解决这个问题吗?面临类似问题->