我有Auth
组件的2个身份验证方法。 Default
和Special
。
第一种方法适用于所有用户,Special
适用于我的朋友......
我希望在发布Special
等于role
时将身份验证方法更改为2
。
所以我把它放在我的UsersController
login
方法中:
if($this->request->data['role'] == 2){
$this->Auth->authenticate = 'Special';
echo 'Method changed!';
}
if($this->Auth->login()){
......
}
如果AppController
,我设置了$components
:
public $components = array('RequestHandler', 'Session',
'Auth' => array('authenticate' => 'Default'));
但是,当我发送带有role=2
的表单时,它会打印Method changed
,但不会更改身份验证方法并使用Default
方法。
我犯了错误吗?
答案 0 :(得分:0)
我遇到了类似的问题,我通过在beforeFilter
的{{1}}操作中定义相同的变量来解决它:
AppController
所以在你的情况下我会在AppController中执行以下操作:
function beforeFilter() {
parent::beforeFilter();
// Pass settings in
$this->Auth->authenticate = array('Form' => array(
'fields' => array('username' => 'email')
));
...
}
...并且在组件声明中只写:
function beforeFilter() {
parent::beforeFilter();
if($this->request->data['role'] == 2){
$this->Auth->authenticate = 'Special';
echo 'Method changed!';
} else {
$this->Auth->authenticate = 'Default';
}
...
}
答案 1 :(得分:0)
我有一个更简单的解决方案:
在您的控制器中,定义新的身份验证数组:
$this->Auth->authenticate = array('Form' => array(
'userModel' => 'User',
'fields' => array('username' => 'login', 'password' => 'password'),
));
然后,为了使您的更改在您的应用程序中生效,只需写下:
$this->Auth->constructAuthenticate();
这就是全部:)