İki Kimlik sütunları ile Zend Auth

2 Cevap php

I Zend_Auth kullanıcı kimlik bilgilerini doğrulamak ve bir sorun haline koştu kullanıyorum. Bir çift sütun kimliği olması gerekir. Iki sütun kullanıcı adı ve müşteri numarası vardır. identityColumn ayar ve setIdentity() yöntemler bu senaryo için izin vermez. Ben credentialTreatment ayarını kullanarak bunu gerçekleştirmek için çalıştı, ancak iki ya da daha fazla müşteri için yinelenen bir kullanıcı adı var, bu sadece diğer müşteriler ziyade için zend_auth_credential_match gibi yanlış hesaplar bu kullanıcıların filtre.

İşte Zend Auth tarafından yürütülen çıkan sorgu sanitized örnek:

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')

Bunu yapmak için Zend_Auth modülü uzatmak için gerekli midir? Başkasının bunu yaptı ve bir örnek sağlayabilir?

Teşekkürler!

2 Cevap

Sana Zend_Auth_Adapter_DbTable bu işlemek için kendi alt sınıfı yazmak gerekir hayal ediyorum.

Gibi bir şey:

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;
  }
}

Bunu yapmanın en iyi yolu kendi Auth adaptörü yazmak olacaktır. Belki de doğrudan Zend_Auth_Adapter_DbTable uzanan.