0

コンポーネントに2つの認証方法がありAuthます。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

間違えましたか?

4

2 に答える 2

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 に答える
0

私はもっ​​と簡単な解決策を持っています:

コントローラで、新しい認証アレイを定義します。

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

次に、アプリケーションで変更を有効にするには、次のように記述します。

$this->Auth->constructAuthenticate();

それで全部です :)

于 2012-10-30T09:28:07.143 に答える