4

我已经建立了一个简单的网站,并使用此处找到的 ACL 指南添加了身份验证。我想我已经信守承诺了。

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

 projectpath/controllerpath/action

重定向到

 projectpath/projectpath/controllerpath/action

我注意到的事情:

  1. 只有当用户登录时才会发生这种情况。如果他们没有登录,它会正确重定向到登录页面。
  2. 只有在作为控制器的页面上才会发生这种情况。如果我输入了错误的页面,它会抛出 Missing Controller 异常。
  3. 我允许公众访问的任何页面都可以正常工作。只有而且只有那些不公开的。

编辑:

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

有什么想法可能导致这种情况吗?

编辑: 我在这方面进步了一点。我删除了 ACL 组件并使用了 Auth 组件。

该问题似乎仅在登录用户尝试访问未经授权的 url 时发生。从蛋糕

propertyAuthComponent::$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'));
    }
}
4

1 回答 1

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

于 2015-02-10T09:13:26.760 回答