假设我在管理员\控制器\动作......
当会话超时并且用户对任何控制器/操作的下一个请求被放置时,我最终进入我的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中有新内容,还是我错过了什么?
答案 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