2011-11-02 358 views
0

我一直在使用各种组码创建用户登录表单,用户登录必须基于唯一的组码进行工作。让我详细解释这些详细信息,网站中存在两个名为(X和Y)的网站以下详细信息ZEND身份验证失败

X [email protected] pwd- 123456 ,groupcode-TESTCODE 
Y [email protected] 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从两个用户行中获取标识符,它不会从用户唯一的行值中获取。

回答

2

我不确定我完全理解了这个问题,但希望这些解决方案中的一个可以帮助您。

首先,您将7个参数传递给Zend_Auth_Adapter_DbTable构造函数,但其​​构造函数只接受5个参数,所以groupcode和testcode在您的代码中不起作用。

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

如果您需要传递组码和测试码,那么您可能需要创建自己的auth适配器。您可以从Zend_Auth_Adapter_DbTable扩展来利用它已经完成的工作,但是可以重写authenticate(),以便将您的组考虑在内。

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