我正在使用CakePHP2.3.6。在一个项目中,我必须为User Management System
面板和&部门实施Admin
。 Students
小组。首先,我想我可以在一个控制器中有一个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表(id
,username
,password
,role
,{{1}中存储登录凭据},created
)。
我的第一个问题是:是否可以在一个控制器中有1个登录/注销部分,例如modified
,对于两个面板UsersController
& AdminsController
?怎么样 ?我只想要登录1&两个面板中StudentsController
的注销功能,其中每个面板将具有不同的登录页面,UsersController
configuration
不同
我的第二个问题是:当我使用AuthComponent(loginRedirect, logoutRedirect, scope, etc.)
时,当我尝试从我自己的登录页面登录时,会出现不同的登录DigestAuthenticate
。该对话框不接受任何用户名/密码。我不想要那个盒子,我想要简单的登录系统,没有任何复杂性。我只是想使用摘要,因为它更安全。
当我退出或转到任何未经身份验证的用户不允许的页面(功能)时,它表示我应该拥有dialog box
,具有UsersController
功能。但是,现在我对两个面板都有不同的登录功能。
那么,解决方案是什么?我应该回到基于login
的登录/注销系统,还是应该使用摘要?我也尝试使用Session
身份验证,但同样的结果是,它在Form
控制器中寻找login
函数。
请帮帮我。
由于