ZEND身份验证失败

时间:2011-11-02 13:20:06

标签: zend-framework

我一直在使用各种组码创建用户登录表单,用户登录必须根据唯一的组码进行工作。让我详细解释一下这两个用户名称(X和Y)存在于以下网站中细节

X  loginname-testuser@gmail.com pwd- 123456 ,groupcode-TESTCODE
Y  loginname-testuser@gmail.com pwd-test124, groupcode-TESTCODE2    

我的Authcontroller

$adapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter(),
                                        'users',
                                        'login',
                                        'password',
                                        'MD5(?)','groupcode','TESTCODE');

$adapter->setIdentity($form->getValue('username'))
                     ->setCredential($form->getValue('password'));  

$result = Zend_Auth::getInstance()->authenticate($adapter); 

结果alwyas通过身份验证错误的错误消息。默认的authcontroller从两个用户行中获取标识,它不从用户唯一的行值中获取。

1 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解这个问题,但希望其中一个解决方案可以帮到你。

首先,您将7个参数传递给Zend_Auth_Adapter_DbTable构造函数,但其​​构造函数只接受5个参数,因此groupcode和testcode对您的代码没有影响。

由于您可能会获得超过1个结果,因此设置歧义标识可能对您有用。通过调用$adapter->setAmbiguityIdentity(true);来设置它,这样如果返回的结果超过1,它将查看每个结果以进行密码匹配。

如果您需要传递组代码和测试代码,那么您可能需要创建自己的身份验证适配器。您可以从Zend_Auth_Adapter_DbTable扩展以利用它已经完成的工作,但是覆盖authenticate()以便考虑您的组。

或者,您可以使用Zend_Auth检查身份,但根本不使用其身份验证方法,只需编写自己的类来验证用户登录,然后使用Zend_Auth设置身份。