0

「ユーザー」と「管理者」を含む Cakephp 2.0 アプリケーションがありますが、それらは 2 つの異なるテーブルに編成されています。これらの 2 つのテーブルを確認して、同じフォームを使用して認証コンポーネントを使用してログインするにはどうすればよいですか? このソリューションを試してみましたが、モデルごとに 1 つずつ、2 つの異なるフォームを実行する必要があります。認証で 2 つのテーブル内を強制的に参照する方法はありますか?

4

1 に答える 1

0

Ok, after some tries I sort this out, first I defined 2 authenticate , one for users and one for administrators,like this:

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

and

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

now we can define the components variable in AppController like this:

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'
                )
                )
    )
);

then in the login method of access controller I try the administrator login and then the users login in this way:

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'));
}

The key here is modify the request->data array substituting the userModel 'Administrator' with 'User'

于 2013-06-18T11:09:58.667 に答える