CakePHP:防止身份验证组件';s";authError“;主页上的信息

CakePHP:防止身份验证组件';s";authError“;主页上的信息,cakephp,Cakephp,我有一个CakePHP项目,其中修改了“app/config/routes.php”,以便根指向“Users”控制器的“dashboard”操作。换句话说,这两个URL指向同一个位置: 我在“应用程序”控制器中设置了“身份验证”组件,如下所示: class AppController extends Controller { var $components = array('Auth', 'Session'); function beforeFilter() {

我有一个CakePHP项目,其中修改了“app/config/routes.php”,以便根指向“Users”控制器的“dashboard”操作。换句话说,这两个URL指向同一个位置:

我在“应用程序”控制器中设置了“身份验证”组件,如下所示:

class AppController extends Controller {
    var $components = array('Auth', 'Session');

    function beforeFilter() {
        $this->Auth->authorize = 'controller';
        $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'dashboard');

        if ($this->Auth->user()) {
            $this->set('logged_in', true);
        }
        else {
            $this->set('logged_in', false);
        }
    }
}

我希望这样,如果一个未经身份验证的用户直接进入,他们会被带到登录页面,并显示“Auth”组件的“authorror”消息,但如果他们进入,他们会被带到登录页面,而不会显示“Auth”组件的“authorror”消息。这可能吗?

嗯,我不明白为什么有时候你会显示错误,为什么有时候不会。。但是您可以创建一个isAuthorized方法并修改默认AuthComponent行为的所有逻辑

打开Auth组件并检查方法“startup()”。在最后一行,您将看到:

$this->Session->setFlash($this->authError, $this->flashElement, array(), 'auth');
$controller->redirect($controller->referer(), null, true);
这是负责显示错误的部分

在它之前,你将

if ($this->isAuthorized($type)) {
    return true;
}
因此,您可以在需要时更改isAuthorized方法以更改此消息

很多工作(我想……)都是徒劳的


注:忽略我可能有一种更简单的方法

我通过在“用户”控制器的“登录”操作中添加以下代码来解决此问题:


一直在寻找这样的东西很长时间了!多谢各位

我必须做一点改变,然后
$this->webroot
不是“/:


如果您真的想阻止主页上的
authror
消息并简单地重定向到登录页面,那么您必须将
false
作为
authror

class AppController extends Controller {

    public function initialize() {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authError' => false
        ]);
    }

}

谢谢你的建议!想想看。有人进入你的网站主页,他们看到的第一件事就是一条信息,上面写着“拒绝访问”。在我看来,不是很友好。
if (str_replace("//","/",$this->webroot.$this->Session->read('Auth.redirect')) == $this->webroot && $this->Session->read('Message.auth.message') == $this->Auth->authError) {
    $this->Session->delete('Message.auth');
}
class AppController extends Controller {

    public function initialize() {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'authError' => false
        ]);
    }

}