无法更改身份验证身份验证方法

时间:2012-08-18 18:47:53

标签: cakephp authentication

我有Auth组件的2个身份验证方法。 DefaultSpecial。 第一种方法适用于所有用户,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方法。

我犯了错误吗?

2 个答案:

答案 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();

这就是全部:)