我正在使用Zend_Auth
验证用户凭据并遇到问题。我需要一个双列标识。这两列是用户名和客户标识符。 identityColumn
设置和setIdentity()
方法不允许此方案。我尝试使用credentialTreatment
设置来完成此操作,但是当我有两个或更多客户的重复用户名时,它只会将zend_auth_credential_match
计算为其他客户的假,而不是将这些用户过滤掉
这是由Zend Auth执行的结果查询的已清理的示例:
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
模块来执行此操作?有没有其他人做过,可以提供一个例子?
谢谢!
答案 0 :(得分: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;
}
}
答案 1 :(得分:3)
最好的方法是编写自己的Auth适配器。甚至可能直接扩展Zend_Auth_Adapter_DbTable。