1

在我按照本教程完成 ACL 的完整实施后,我的 Cake Php 项目重定向到错误的 URL -> http://book.cakephp.org/2.0/en/tutorials-and-examples/simple-acl-controlled- application/simple-acl-controlled-application.html

问题 -

正确的重定向-> localhost/appname/

实现 ACL 后重定向 -> localhost/appname/appname/

这是登录后发生的重定向。公共页面(登录)工作正常。

下面是 Appcontroller 代码-

public $components = array( 'Acl',
'Auth' => array(
    'authorize' => array(
        'Actions' => array('actionPath' => 'controllers')
    )
),
'Session'
);
public $helpers = array('Html', 'Form', 'Session');
// only allow the login controllers only
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('login');
}

Acos 表截图 Acos 表截图 Aros 表截图 阿罗斯表截图 Aros_Acos 表截图 Aros_Acos 表格截图
groups 表
在此处输入图像描述

路由.php

Router::connect('/dashboard', array('controller' => 'dashboards', 'action' => 'index'));
Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
Router::connect('/logout', array('controller' => 'users', 'action' => 'logout'));
Router::connect('/', array('controller' => 'dashboards', 'action' => 'index'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';

当我只使用“Auth”而不是以下内容时,正确的 url 正在打开。

'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),

但是,那么 ACL 不起作用。

4

1 回答 1

0

从您粘贴的代码中,您似乎没有配置登录重定向。我希望你的应用控制器中的 beforeFilter 看起来更像这样:

public function beforeFilter() {
    //Configure AuthComponent
    $this->Auth->loginAction = array(
      'controller' => 'users',
      'action' => 'login'
    );
    $this->Auth->logoutRedirect = array(
      'controller' => 'foo',
      'action' => 'bar'
    );
    $this->Auth->loginRedirect = array(
      'controller' => 'foo',
      'action' => 'bar'
    );
}

在您的情况下,您似乎希望登录用户返回主页,因此在此示例中,您的主页将在 app/config/routes.php 中定义为 foo 控制器的 bar 操作。

在您定义登录操作的控制器(通常是用户控制器)中,您还可以添加重定向,例如:

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            // Redirect the user to home
            return $this->redirect($this->Auth->redirect(array('controller'=>'foo', 'action'=>'bar')));
        }
    }
}

您似乎缺少 AppController 组件数组中的 ACL 组件。尝试将其更新为:

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers')
        )
    ),
    'Session'
);
于 2015-02-07T19:17:33.777 回答