Cakephp 验证组件问题

Cakephp 验证组件问题,cakephp,cakephp-1.3,Cakephp,Cakephp 1.3,我正在尝试让我的管理员路由与身份验证组件一起工作。我希望下面的路由工作 Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true)); 但当我输入/admin时,它会重定向到/admin/users/login并显示此错误 Create UsersController::admin_login() in file: cms.local/contro

我正在尝试让我的管理员路由与身份验证组件一起工作。我希望下面的路由工作

Router::connect('/admin', array('controller' => 'pages', 'action' => 'index', 'admin' => true));
但当我输入/admin时,它会重定向到/admin/users/login并显示此错误

Create UsersController::admin_login() in file: cms.local/controllers/users_controller.php
这是我的应用程序控制器代码

class AppController extends Controller {

    var $components = array('DebugKit.Toolbar','Auth','Session');

    function beforeFilter(){

        //Set up Auth Component
        $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
        $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'admin_index');
        $this->Auth->allow('display');

    }

}
用户/控制器

<?php
class UsersController extends AppController {

    var $name = 'Users';

    function login(){

    }

    function admin_logout(){
        $this->Session->destroy();
        $this->redirect($this->Auth->logout());
    }

}
?>

如果你需要更多信息,请告诉我

谢谢

别担心,一切正常:)

在AppController::beforeFilter()中,您声明为了登录,登录操作是Users/login(Users/admin\u login,如果admin=>true)

当您使用admin=>true进入页面/索引且未登录时,您将被重定向到Users/admin\u login,这说明:

但当我输入/admin时,它会重定向到/admin/users/login并显示此错误

Create UsersController::admin_login() in file: cms.local/controllers/users_controller.php
在文件cms.local/controllers/users\u controller.php中创建UsersController::admin\u login()


找不到UsersController::admin\u login()方法,您应该创建它。

您可以通过在登录操作中指定
'admin'=>false来强制Auth使用无前缀登录操作。这样,所有需要身份验证的操作都将使用无前缀的登录操作。因此,您的beforeFilter将如下所示:

function beforeFilter(){

    //Set up Auth Component
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'admin' => false);
    $this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'admin_index');
    $this->Auth->allow('display');

}

类似地,您也可以选择另一种方式,指定'admin'=>true以仅使用admin\u登录

这对我很有效:-

function beforeFilter() {
    if (isset($this - > params['admin'])) {
        $loggedAdminId = $this - > Session - > read("adminid");
        if (!$loggedAdminId && $this - > params['action'] != "admin_login") {
            $this - > redirect("/admin/admins/login");
            $this - > Session - > setFlash('The URL you followed requires you login.');
        } else {
            $this - > Auth - > allow('*');
        }
    } else {
        $this - > Auth - > loginAction = array('controller' = > 'users', 'action' = > 'login', 'admin' = > false);
        $this - > Auth - > loginRedirect = array('controller' = > 'users', 'action' = > 'admin_index');
    }
}

为什么我需要两个登录功能?登录和管理员登录。我添加了admin_登录,但它要求查看。身份验证组件不喜欢管理员路由吗?都是因为cake约定。如果您需要前缀
admin
才能工作,那么您确实需要
login
admin\u login
都在那里。还应该创建相应的视图,因为用户和管理员看到不同的登录是合乎逻辑的,对吗?