3

Web サイトでの認証には、Zend_Auth_Adapter_DbTable を使用します。すべて問題なく動作しますが、Zend Framework はテーブル内で一意の ID のみを許可します。

アイデンティティとして、ユーザーからのメールアドレスを使用します。問題は、テーブルにこのメールアドレスを持つアイテムが他にもあることです。ユーザーはそこのアカウントを削除できるので、行全体を削除するのではなく、ステータスを -2 などに変更するだけです。アクティブ ユーザーのステータスは 1 です。

私はそれを次のように使用しようとします:

    $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password', "? AND `status`='1'");
    $authAdapter->setIdentity($email);
    $authAdapter->setCredential($password);

しかし、うまくいきません。同じメールアドレスを持つ非アクティブなユーザーを削除すると、すべてが機能します。何故ですか?

4

1 に答える 1

2

あなたはこのようにすることができます

$authAdapter->setIdentity($email);
$authAdapter->setCredential($password);

$select = $authAdapter->getDbSelect();
$select->where('status = 1'); 

この完全なコードを試してください

 $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
     $authAdapter->setIdentity($email);
    $authAdapter->setCredential($password);
    $select = $authAdapter->getDbSelect();
            $select->where('status = "1"');

また

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());

       $authAdapter->setTableName('user')
            ->setIdentityColumn('email')
            ->setCredentialColumn('password');     

        $select = $authAdapter->getDbSelect();
        $select->where('status = "1"');

[編集]
または

$authAdapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'email', 'password');
         $authAdapter->setIdentity($email);
        $authAdapter->setCredential($password);
$authAdapter->setCredentialTreatment('? and status = "1"');

参考までに: zend.auth.adapter.dbtable

于 2012-06-07T10:43:38.903 に答える