0

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

我犯错了吗?

4

2 回答 2

0

我有一个更简单的解决方案:

在您的控制器中,定义新的身份验证数组:

$this->Auth->authenticate = array('Form' => array(
    'userModel' => 'User',
    'fields' => array('username' => 'login', 'password' => 'password'),
));

然后为了使您的更改在您的应用程序中生效,只需编写:

$this->Auth->constructAuthenticate();

就这样 :)

于 2012-10-30T09:28:07.143 回答
0

我有一个类似的问题,我通过在beforeFilter操作中定义相同的变量来解决它AppController

function beforeFilter() {

    parent::beforeFilter();

    // Pass settings in
    $this->Auth->authenticate = array('Form' => array(
        'fields' => array('username' => 'email')
    ));

    ...

}

因此,在您的情况下,我将在 AppController 中执行以下操作:

function beforeFilter() {

    parent::beforeFilter();

    if($this->request->data['role'] == 2){
        $this->Auth->authenticate = 'Special';
        echo 'Method changed!';
    } else {
        $this->Auth->authenticate = 'Default';
    }

    ...

}

...并且在组件声明中只写:

public $components = array('RequestHandler', 'Session', 'Auth');
于 2012-08-18T19:05:35.427 回答