Cakephp 多个路由前缀+;登录不起作用

Cakephp 多个路由前缀+;登录不起作用,cakephp,authentication,login,cakephp-2.2,Cakephp,Authentication,Login,Cakephp 2.2,我已经搜索过了,虽然人们在这个网站和其他地方问过类似的问题,如果不是完全相同的问题,但其中一些问题没有得到回答,其余的问题根本不适用于我(不同的错误,旧的蛋糕版本,等等) 我在core.php中设置了两个路由前缀。这些是“管理”和“适度”。我希望所有用户都通过/users/login登录,然后被重定向到/account 当我转到需要身份验证的标准(无前缀)页面(如/account)时,我会被重定向到/admin/users/login(我不需要前缀) 登录后,我被成功重定向到/account。(

我已经搜索过了,虽然人们在这个网站和其他地方问过类似的问题,如果不是完全相同的问题,但其中一些问题没有得到回答,其余的问题根本不适用于我(不同的错误,旧的蛋糕版本,等等)

我在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”。没有骰子。我使用的是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.
    // …
]);