多个路由前缀+ loginAction不工作

时间:2013-05-09 22:23:18

标签: cakephp authentication login cakephp-2.2

我已经搜索过,虽然人们已经在本网站和其他地方询问了类似的问题,但其中有几个问题没有得到答复,其余的根本不适用于我(不同的错误,旧蛋糕版本等) )。

我的core.php中设置了两个路由前缀。那些是“管理员”和“温和”。我希望所有用户都可以通过/users/login登录,然后重定向到/account

当我转到需要身份验证的标准(非加前缀)页面,例如/account时,我被重定向到/admin/users/login(我不想要前缀)。

登录后,我成功重定向到/account。 (至少那部分是有效的)

这是我的AppController代码

public $components = array('Session',
   'Auth' => array(
        'loginAction' => array('prefix' => false, 'admin' => false, 'moderate' => false, 'controller' => 'users', 'action' => 'login'),
        'loginRedirect' => array('prefix' => false, 'admin' => false, 'moderate' => false, 'controller' => 'account', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'index', 'prefix' => false, 'admin' => false, 'moderate' => false),
        'authError' => "You can't access that page",
        'authorize' => array('Controller')
    )
); // components

我也尝试将所有' false '更改为' null '。没有骰子。我正在使用CakePHP 2.2.4

编辑2014年11月11日 因为人们还在回答我只想注意这个问题已经解决了。我从来没有想出确切的问题是什么,所以我从来没有发布官方/接受的答案。我怀疑这是我的路由问题。我上面提供的AppController代码是正确的。

3 个答案:

答案 0 :(得分:2)

尝试使用:

$this->Auth->loginAction = '/users/login';

希望有所帮助!

答案 1 :(得分:0)

将以下代码放在AppController.Hope中帮助。

public function beforeFilter() {
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login','admin' => false, 'prefix' => false, 'moderate' => false);
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login','admin' => false, 'prefix' => false, 'moderate' => false);
    $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'home','admin' => false, 'prefix' => false, 'moderate' => false);
    }

答案 2 :(得分:0)

CakePHP 3答案

在您的APP/src/Controller/AppController.php中:

$this->loadComponent('Auth', [
    'loginAction' => [
        'prefix' => false, // tells the app not to use any prefix
        'controller' => 'Users', // change to your preference
        'action' => 'login', // change to your preference
    ],
    // loginRedirect, logoutRedirect etc.
    // …
]);

与将单个前缀列入黑名单相比,这是一种更加灵活且面向未来的方式,因为您可能事先不知道它们可能是或不是。

确认此功能适用于我的CakePHP。通过删除'prefix' => false进行测试,它可以使应用重定向到带前缀的登录页面,例如/admin/users/login,恢复该行将其修复。

官方文档