我有一个带有“用户”和“管理员”的 cakephp 2.0 应用程序,但它们被组织成 2 个不同的表,我如何检查这 2 个表以使用 Auth Component 使用相同的表单登录?我尝试使用此解决方案,但您必须执行 2 种不同的表单,每个模型一个,有没有办法强制身份验证查看两个表?
问问题
237 次
1 回答
0
好的,经过一些尝试,我解决了这个问题,首先我定义了 2 个 authenticate ,一个用于用户,一个用于管理员,如下所示:
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class AdministratorAuthenticate extends FormAuthenticate {
}
和
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class UserAuthenticate extends FormAuthenticate {
}
现在我们可以像这样在 AppController 中定义 components 变量:
public $components = array(
'Session',
'Auth' => array(
'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'),
'authenticate' => array(
'Administrator' => array(
'fields' => array('username' => 'email'),
'userModel' => 'Administrator'
),
'User' => array(
'fields' => array('username' => 'email'),
'userModel' => 'User'
)
)
)
);
然后在访问控制器的登录方法中,我尝试管理员登录,然后用户以这种方式登录:
if ($this->Auth->login()) {
$this->redirect(array('controller'=>'administrator','action'=>'index'));
}
else {
$this->request->data['Users']=$this->request->data['Administrator'];
unset($this->request->data['Administrator']);
if ($this->Auth->login()) {
$this->redirect(array('controller'=>'user','action'=>'index'));
}
else
$this->Session->setFlash(__('Invalid username or password, try again'));
}
这里的关键是修改 request->data 数组,将 userModel 'Administrator' 替换为 'User'
于 2013-06-18T11:09:58.667 回答