我遇到了这个问题。在我的zend应用程序中验证登录凭据时,我还想检查帐户是否已经确认。 Confirmed是我帐户表中的布尔列,默认设置为False。我试图通过以下代码实现这一点..但它无法正常工作
$db = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('Account');
$authAdapter->setIdentityColumn('Email');
$authAdapter->setCredentialColumn('Password');
$authAdapter->setCredentialTreatment('Confirmed = 1');
$authAdapter->setIdentity($data['email']);
$authAdapter->setCredential($data['password']);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
if ($data['public'] == "1") {
Zend_Session::rememberMe(Zend_Registry::getInstance()->constants->sessiontime);
} else {
Zend_Session::forgetMe();
}
return TRUE;
} else {
return FALSE;
}
尽管帐户未确认身份验证通过。请告诉我我哪里错了
答案 0 :(得分:1)
凭证处理参数指定应如何检查密码。您可以覆盖它以添加其他子句,但仍需要包含密码位。我真的不希望你的方法对任何用户进行身份验证,所以这可能不是主要问题,但请尝试:
$authAdapter->setCredentialTreatment('MD5(?) AND Confirmed = 1');
更改MD5位,但密码已加密。这应该生成一个查询:
... WHERE Email = 'xxx' AND Password = MD5(?) AND Confirmed = 1