cakephp如何处理admin登录重定向

时间:2014-01-21 09:48:21

标签: cakephp

我创建了一个带有管理部分的小项目。 我正在使用管理员路由重定向到我的控制器中的管理员操作。 该网站的页面可供所有人使用,无需登录。 要访问/ admin或/ admin / users等,您必须登录。

我已将管理操作传播到我的控制器,例如“admin_login”,“admin_users”,...

所以我的问题是,当有人进入/ admin / users或其他管理页面时,如果用户在会话中,我必须检查每个控制器操作,否则重定向到登录表单。

有没有办法在一个地方做到这一点?我在AppController类中使用了一个beforefilter,但由于我的控制器包含“标准”操作和“管理”操作的组合,因此将它放在AppController中对于这种情况不起作用,因为它总是在登录时重定向。

在我的AppController中,我有这段代码

public function beforeFilter(){
   if(!$this->Session->check('User')){
      $this->redirect('/admin/users/login');
   }
}

当使用这样的东西时,我得到一个无限循环:

public function beforeFilter(){
   if(!empty($this->request->params['admin'])){
       if(!$this->Session->check('User')){
          $this->redirect('/admin/users/login');
       }       
    }
}

2 个答案:

答案 0 :(得分:1)

您使用的是admin routes吗?

例如,您应该UsersController使用loginsignup方法,这些方法对每个人都是可访问的,而admin_edit对于需要登录的admin_edit

方法/admin/users/edit对应于网址AppController

public $components = array('Auth' => array( 'loginAction' => array( 'admin' => false, 'controller' => 'users', 'action' => 'login'), 'loginRedirect' => array('controller' => 'posts', 'action' => 'index'), 'logoutRedirect' => array( 'controller' => 'pages', 'action' => 'display', 'home'), 'authenticate' => array('Form' => array('fields' => array('username' => 'email'))))); 中,您应该包含Auth组件。 实施例

UsersController

public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('login', 'register'); } 中,您应该有类似

的内容
{{1}}

答案 1 :(得分:0)

我最终使用本教程因为我没有使用Auth而是使用我自己的脚本。 有点过时但有一些调整符合我的需要。

function beforeFilter() {
        // if admin url requested
        if(isset($this->request->params['admin']) && $this->request->params['admin']) {
            // check user is logged in
            if( !$this->Session->check('User') ) {
                $this->Session->setFlash('You must be logged in for that action.');
                $this->redirect('/login');
            }

            // save user data
            $this->_User = $this->Session->read('User');
            $this->set('user',$this->_User);

            // change layout
            $this->layout = 'admin';
        }
    }
相关问题