使用DiegstAuthenticate登录CakePHP无法正常工作

时间:2014-09-24 08:30:04

标签: cakephp authentication

我正在使用CakePHP2.3.6。在一个项目中,我必须为User Management System面板和&部门实施AdminStudents小组。首先,我想我可以在一个控制器中有一个login & logout系统,比如UsersController。但是,后来我发现我需要为2个面板提供2个不同的login pages,这就是为什么我在login&中放置了2个StudentsController函数的原因。 AdminsController

接下来,我首先使用User Management System实现了完整Sessions,意味着在&使用Sessions手动输出。那很好用。但是,最近我想我为什么要手动编写代码,如果它已经在API中?所以,现在我正在尝试使用AuthComponent

但是,当我将所有内容从Session更改为AuthComponent时,其表现很奇怪。以下是AuthComponent的代码:

StudentsController

public $components=array('Auth'=>array(
                            'loginRedirect'=>array('controller'=>'students','action'=>'editProfile'),
                            'logoutRedirect'=>array('controller'=>'students','action'=>'index'),
                            'authenticate'=>array('Digest'=>array('scope'=>array('User.role'=>"student"))),
                            'unauthorizedRedirect'=>array('controller'=>'students','action'=>'login')
                        )
);
beforeFilter函数中的

public function beforeFilter(){
    parent::beforeFilter();
    $this->Auth->allow('index','login','signUp');
    $this->Auth->deny('editProfile');
    $this->layout='applicant_layout';
}
login函数中的

public function login(){
    if($this->request->is('post'))
        if($this->Auth->login()){
            $this->Session->setFlash('Welcome '.$this->Student->field('name',array('Student.id'=>$this->Auth->user('id'))));
            $this->set('title_for_layout','Login');
            $this->redirect($this->Auth->redirect());
        }else{
            $this->Session->setFlash('Invalid username or password, please try again');
            $this->set('title_for_layout','Error - Login');
        }
}

再次,在AdminsController

public $components=array('Auth'=>array(
                            'loginRedirect'=>array('controller'=>'admins','action'=>'index'),
                            'logoutRedirect'=>array('controller'=>'admins','action'=>'index'),
                            'authenticate'=>array('Digest'=>array('scope'=>array('User.role'=>"admin"))),
                            'unauthorizedRedirect'=>array('controller'=>'admins','action'=>'login') 
                        )
);
beforeFilter函数中的

public function beforeFilter(){
    parent::beforeFilter();
    $this->Auth->allow('index','login');
    $this->Auth->deny('editProfile');
    $this->layout='applicant_layout';
}
login函数中的

public function login(){
    if($this->request->is('post'))
        if($this->Auth->login()){
            $this->Session->setFlash('Welcome '.$this->Admin->field('name',array('Admin.id'=>$this->Auth->user('id'))));
            $this->set('title_for_layout','Login');
            $this->redirect($this->Auth->redirect());
        }else{
            $this->Session->setFlash('Invalid username or password, please try again');
            $this->set('title_for_layout','Error - Login');
        }
}

在这里,我只在users db表(idusernamepasswordrole,{{1}中存储登录凭据},created)。

我的第一个问题是:是否可以在一个控制器中有1个登录/注销部分,例如modified,对于两个面板UsersController& AdminsController?怎么样 ?我只想要登录1&两个面板中StudentsController的注销功能,其中每个面板将具有不同的登录页面,UsersController

configuration不同

我的第二个问题是:当我使用AuthComponent(loginRedirect, logoutRedirect, scope, etc.)时,当我尝试从我自己的登录页面登录时,会出现不同的登录DigestAuthenticate。该对话框不接受任何用户名/密码。我不想要那个盒子,我想要简单的登录系统,没有任何复杂性。我只是想使用摘要,因为它更安全。

当我退出或转到任何未经身份验证的用户不允许的页面(功能)时,它表示我应该拥有dialog box,具有UsersController功能。但是,现在我对两个面板都有不同的登录功能。

那么,解决方案是什么?我应该回到基于login的登录/注销系统,还是应该使用摘要?我也尝试使用Session身份验证,但同样的结果是,它在Form控制器中寻找login函数。

请帮帮我。

由于

0 个答案:

没有答案