Cakephp 多个路由前缀+;登录不起作用
我已经搜索过了,虽然人们在这个网站和其他地方问过类似的问题,如果不是完全相同的问题,但其中一些问题没有得到回答,其余的问题根本不适用于我(不同的错误,旧的蛋糕版本,等等) 我在core.php中设置了两个路由前缀。这些是“管理”和“适度”。我希望所有用户都通过Cakephp 多个路由前缀+;登录不起作用,cakephp,authentication,login,cakephp-2.2,Cakephp,Authentication,Login,Cakephp 2.2,我已经搜索过了,虽然人们在这个网站和其他地方问过类似的问题,如果不是完全相同的问题,但其中一些问题没有得到回答,其余的问题根本不适用于我(不同的错误,旧的蛋糕版本,等等) 我在core.php中设置了两个路由前缀。这些是“管理”和“适度”。我希望所有用户都通过/users/login登录,然后被重定向到/account 当我转到需要身份验证的标准(无前缀)页面(如/account)时,我会被重定向到/admin/users/login(我不需要前缀) 登录后,我被成功重定向到/account。(
/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”。没有骰子。我使用的是CakePHP2.2.4
自2014年2月11日起编辑
因为人们还在回答,我只想指出这个问题已经解决了。我从来没有弄清楚确切的问题是什么,所以我从来没有发布过官方/公认的答案。我怀疑这是我的路线问题。我上面提供的AppController代码是正确的。尝试使用以下方法:
$this->Auth->loginAction = '/users/login';
希望有帮助 把下面的代码放在AppController中。希望对您有所帮助
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);
}
cakephp3答案
在您的:
这比将单个前缀列入黑名单更灵活,也更能证明未来,因为您可能事先不知道这些前缀可能是什么,也可能不是
确认这对我的CakePHP有效。通过删除'prefix'=>false
进行测试,它使应用程序重定向到带前缀的登录页面,例如/admin/users/login
,还原该行将其修复
官方文件
- → Ctrl+F“登录操作”
- → Ctrl+F“保留前缀”
前缀
选项?即使没有它,也可以正常工作。作为惯例,还有一点建议是将路由参数移动到表单中,因为这样更具可读性:'loginAction'=>array('controller'=>'users','action'=>'login','admin'=>false',medium'=>false)
@bowlerae尝试删除前缀
,如果它没有运行,那么我很乐意检查完整的代码库并提供更多帮助。它最初没有所有'prefix'=>false、'admin'=>false、'mediate'=>false
,因此无法工作。我刚才试着只删除'prefix'=>false
并保留其余的('admin'=>false,'mediate'=>false
),但仍然不起作用。此外,有时在成功登录后,它会将我重定向到/account
,有时它会将我重定向到/admin/account
,有时它会将我重定向到/users/login
(需要第二次登录),这可能是一个会话问题,因为用户是否是管理员将作为值存储在会话中并使用它。如果您刚刚以管理员身份注销,然后以普通用户身份登录,同时由于某种原因,您的会话仍然存在,您将被重定向到正确的位置。检查您的会话,可能存在一些错误,导致会话持续。我认为这不是问题所在。另外,如果我试图直接访问页面/users/login
,它会将我重定向到/admin/users/login
,并再次表示我无法访问该页面。在我登录后,它会将我重定向回我试图访问的原始页面,该页面将是/users/login
,但此页面应仅适用于来宾。我的用户名显示在屏幕上,并显示欢迎信息,因此登录不会失败。在前缀路由之前,我没有这些问题。你能提供一些我可以运行和测试/调试的代码吗?谢谢你的回复。事实上,我从来没有弄明白问题是什么,它“突然”又开始起作用了。当然,不是自动的,我一定做了些什么来修复它,但我不知道是什么。大约一个星期都不起作用,然后就开始了。我认为这是我的路线中的一个问题。我的AppController中的代码是正确的。
$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.
// …
]);