cakephp2 Auth Component,包含2个用户表

时间:2013-06-16 23:04:11

标签: php authentication cakephp-2.0

我有一个带有'用户'和'管理员'的cakephp 2.0应用程序,但它们被组织成2个不同的表,如何使用相同的表单检查这两个表以使用Auth Component登录?我试过这个solution,但是你必须做两种不同的形式,每个模型一个,有没有办法强制认证看两个表?

1 个答案:

答案 0 :(得分:0)

好的,经过一些尝试我解决了这个问题,首先我定义了2个身份验证,一个针对用户,一个针对管理员,如下所示:

App::uses('FormAuthenticate', 'Controller/Component/Auth');
class AdministratorAuthenticate extends FormAuthenticate {
}

App::uses('FormAuthenticate', 'Controller/Component/Auth');
class UserAuthenticate extends FormAuthenticate {
}

现在我们可以在AppController中定义组件变量,如下所示:

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->数据数组,用'User'替换userModel'Administrator'