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 に答える