auth组件问题

时间:2011-01-20 04:01:56

标签: cakephp cakephp-1.3

我试图让我的管理路由与auth组件一起工作。我想要以下路由工作。

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

这是我的app_controller代码。

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');

    }

}

users_controller

<?php
class UsersController extends AppController {

    var $name = 'Users';

    function login(){

    }

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

}
?>

如果您需要更多信息,请与我们联系。

由于

3 个答案:

答案 0 :(得分:0)

别担心,一切正常:)

在AppController :: beforeFilter()中,您声明为了登录,loginAction是Users / login(Users / admin_login if admin =&gt; true)

当您使用admin =&gt; true转到Pages / index并且您尚未登录时,您将被重定向到Users / admin_login,并且如下所示:

  

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

     

Create UsersController::admin_login() in file: cms.local/controllers/users_controller.php

找不到UsersController :: admin_login()方法,你应该创建它。

答案 1 :(得分:0)

您可以通过在loginAction中指定'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'=&gt;如果仅使用 admin_login ,则为true。

答案 2 :(得分:0)

这对我很有用: -

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');
    }
}