cakePHP 3.0 - 当会话超时“管理控制器+动作”时...无法重定向到非管理员控制器+动作

时间:2015-07-17 21:19:34

标签: cakephp authentication redirect cakephp-3.0

假设我在管理员\控制器\动作......

当会话超时并且用户对任何控制器/操作的下一个请求被放置时,我最终进入我的admin \ users \ login()函数。这正是基于Auth组件设置应该发生的事情!

但是,然后重定向到['admin'=> false,'controller'=> 'users','action'=> 'login']立即回到“admin \ users \ login”

代码:

$this->redirect(['admin' => false, 'controller' => 'users', 'action' => 'login'])

此时不尊重admin = false。

实际上,在AppController中查看我的'Auth'组件初始化:

  // Authentication
  $this->loadComponent('Auth', [
    'authorize' => array('Controller'),
    'loginAction' => array('admin' => false, 'plugin' => NULL, 'controller' => 'users', 'action' => 'login'),
    'loginRedirect' => array('admin' => false, 'plugin' => NULL, 'controller' => 'pages', 'action' => '/'),
    'logoutRedirect' => array('admin' => false, 'plugin' => NULL, 'controller' => 'users', 'action' => 'login'),
    'authError' => 'Authorization is Required!',
    'authenticate' => [
        'Form' => ['fields' => ['username' => 'name', 'password' => '
                    'passwordHasher' => 'Default'
        ]
    ]
  ]);

在我看来好像是admin =>假被忽略了。我确定当延迟(去咖啡)新请求某些控制器/操作时,请求将被发送到admin \ users \ login,因为最后一个是管理员...但为什么不应该admin \ users \ login中的实际重定向或此处显示的Auth-> loginRedirect仍然强制执行管理路由?

3.0中有新内容,还是我错过了什么?

3 个答案:

答案 0 :(得分:1)

无论文档如何,' admin' =>如果最后一个请求是管理路由,会话超时后,false将不会删除在Auth组件中执行的管理路由。

我发现问题#14904579(日期为2013年)通过更改' loginAction'解决了这个问题。 => ' / users / login' ...省略数组语法。

我不知道这个问题是否在2013年出现过一次,并且再次出现在cakphp 3.0.9版本中。我在运行2.6.7

时没有遇到这个问题

答案 1 :(得分:0)

这是从路由中删除任何前缀的正确方法(包括管理员):

$this->redirect(['prefix' => false, 'controller' => 'users', 'action' => 'login'])

答案 2 :(得分:0)

$this->loadComponent('Auth', [
    'loginAction' => [
        'prefix' => false, //just add this if you wish to use the array format for urls
        'controller' => 'Users',
        'action' => 'login',
    ],
    'authError' => 'Login to continue.',
    'storage' => 'Session'
]);

According to the Docs, but no prefix in the LoginAction key in example code