cakePHP 3.0 - 当 "in" 管理员控制器+动作时会话超时...无法重定向到非管理员控制器+动作
cakePHP 3.0 - When session times out while "in" an admin controller+action... Cannot redirect to non-admin controller+action
假设我在 admin\controller\action...
当会话超时并且用户对任何 controller/action 的下一个请求被放置时,我最终进入 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 => false 似乎被忽略了。我确定当延迟(去喝咖啡)一些 controller/action 的新请求发生时,该请求将被发送到 admin\users\login,因为最后一个是管理员......但为什么不应该' admin\users\login 中的实际重定向或此处显示的 Auth->loginRedirect 是否仍然强制执行管理路由?
3.0 中有什么新东西吗,还是我只是遗漏了什么?
无论文档如何,'admin' => false 不会删除在会话超时后最后一个请求是管理路由时在 Auth 组件中执行的管理路由。
我发现问题 #14904579(日期为 2013 年)通过更改 'loginAction' => '/users/login'... 省略数组语法解决了这个问题。
我不知道这个问题是否在 2013 年存在过一次,并且在 cakphp 3.0.9 版本中再次出现。我在 运行 2.6.7
时没有遇到这个问题
这是从路由(包括管理员)中删除任何前缀的正确方法:
$this->redirect(['prefix' => false, 'controller' => 'users', 'action' => 'login'])
$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
假设我在 admin\controller\action...
当会话超时并且用户对任何 controller/action 的下一个请求被放置时,我最终进入 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 => false 似乎被忽略了。我确定当延迟(去喝咖啡)一些 controller/action 的新请求发生时,该请求将被发送到 admin\users\login,因为最后一个是管理员......但为什么不应该' admin\users\login 中的实际重定向或此处显示的 Auth->loginRedirect 是否仍然强制执行管理路由?
3.0 中有什么新东西吗,还是我只是遗漏了什么?
无论文档如何,'admin' => false 不会删除在会话超时后最后一个请求是管理路由时在 Auth 组件中执行的管理路由。
我发现问题 #14904579(日期为 2013 年)通过更改 'loginAction' => '/users/login'... 省略数组语法解决了这个问题。
我不知道这个问题是否在 2013 年存在过一次,并且在 cakphp 3.0.9 版本中再次出现。我在 运行 2.6.7
时没有遇到这个问题这是从路由(包括管理员)中删除任何前缀的正确方法:
$this->redirect(['prefix' => false, 'controller' => 'users', 'action' => 'login'])
$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