0

我被这个问题困住了。在我的 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;
    }

尽管该帐户未确认身份验证通过。请告诉我我哪里错了

4

1 回答 1

1

凭据处理参数指定应如何检查密码。您可以覆盖它以添加其他子句,但您仍然需要包含密码位。真的,我没想到您的方法可以验证任何用户,所以这可能不是主要问题,但请尝试:

$authAdapter->setCredentialTreatment('MD5(?) AND Confirmed = 1');

更改 MD5 位,但您的密码已加密。这应该会生成一个查询,如下所示:

... WHERE Email = 'xxx' AND Password = MD5(?) AND Confirmed = 1
于 2013-02-13T13:32:12.103 回答