Zend Auth报错:多记录匹配身份,如何筛选激活账户?
解决方案
要让Zend Auth仅匹配已激活(active = 1)的用户账户,你可以通过修改Zend_Auth_Adapter_DbTable的查询条件实现——利用适配器的getDbSelect()方法获取默认查询对象,再追加自定义过滤条件。
修改后的完整代码如下:
$db = Zend_Registry::get('db'); $authAdapter = new Zend_Auth_Adapter_DbTable($db); $authAdapter->setTableName('user'); $authAdapter->setCredentialColumn('password'); $authAdapter->setIdentityColumn('email'); $authAdapter->setCredential($password); $authAdapter->setIdentity($email); // 获取适配器的默认查询构建器 $select = $authAdapter->getDbSelect(); // 添加条件:仅查询已激活的账户 $select->where('active = ?', 1); // 执行认证(此处可添加后续的认证结果判断逻辑) $result = $authAdapter->authenticate();
说明
getDbSelect()返回适配器内部用于查询用户的Zend_Db_Select对象,你可以对其进行任意查询条件修改- 使用参数绑定的方式添加
active = 1条件,能避免SQL注入风险 - 追加该条件后,适配器只会匹配邮箱一致且
active=1的记录,彻底解决同邮箱多账户导致的More than one record matches the supplied identity认证报错
内容的提问来源于stack exchange,提问作者Dan Rais
相关产品推荐
相关产品推荐

