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