1

Zend_Authユーザーの資格情報を検証するために使用していますが、問題が発生しました。デュアルカラムIDが必要です。2つの列は、ユーザー名と顧客IDです。identityColumn設定とメソッドでは、setIdentity()このシナリオは許可されていません。この設定を使用してこれを達成しようとしましたcredentialTreatmentが、2人以上の顧客のユーザー名が重複している場合、zend_auth_credential_matchそれらのユーザーを除外するのではなく、他の顧客のfalseとして計算するだけです。

ZendAuthによって実行された結果のクエリのサニタイズされた例を次に示します

SELECT `users`.*,
    (CASE
        WHEN `password` = 'password'
            AND active = 1
            AND customer_id = 1
            THEN 1 
        ELSE 0
        END) AS `zend_auth_credential_match`
FROM `users`
WHERE (`username` = 'username')

Zend_Authこれを行うには、モジュールを拡張する必要がありますか?他の誰かがそれをして、例を提供することができますか?

ありがとう!

4

2 に答える 2

5

これを処理するには、の独自のサブクラスを作成する必要があると思いますZend_Auth_Adapter_DbTable

何かのようなもの:

class My_Auth_Adapter extends Zend_Auth_Adapter_DbTable {
  protected $_customerColumn = 'customer_id';
  protected $_customerId = false;

  public function setCustomerId($id) {
    $this->_customerId = $id;
    return $this;
  }

  public function getCustomerId() {
    return $this->_customerId!==false?$this->_customerId:'';
  }

  public function _authenticateCreateSelect() {
    $select = parent::_authenticateCreateSelect();
    $select->where($this->_zendDb->quoteIdentifier($this->_customerColumn, true)." = ?", $this->getCustomerId());
    return $select;
  }
}
于 2010-02-16T21:57:01.730 に答える
3

これを行う最良の方法は、独自のAuthアダプターを作成することです。おそらく、Zend_Auth_Adapter_DbTableを直接拡張することさえできます。

于 2010-02-16T21:50:46.627 に答える