1

これはこれまでで最もイライラします。白い画面しか表示されない場合、エラーを見つけることはほとんど不可能です!!!

このコードは他のプロジェクトで使用されており、そこでは問題なく動作するため、構文的には正しいです。しかし、設定で何かが間違っているに違いありません...

コードは次のとおりです。

protected function _process($values)
{
    // Get our authentication adapter and check credentials
    $adapter = $this->_getAuthAdapter();
    $adapter->setIdentity($values['username']);
    $adapter->setCredential($values['password']);

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

    if ($result->isValid()) {
        $user = $adapter->getResultRowObject();
        $auth->getStorage()->write($user);
        return true;
    }
    return false;
}

protected function _getAuthAdapter()
{
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
    $authAdapter->setTableName('Users')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password')
                ->setCredentialTreatment('md5(?)');
    return $authAdapter;
}

これは認証コントローラーにあり、アダプターなどをセットアップした後に呼び出されます。$result 行の直前に表示されます。$result 行の直後に配置すると、WSOD が発生し、システムが停止します。誰かが私のコードをデバッグするのに十分ではないことはわかっていますが、他の誰かがこの問題を抱えていて、これを修正する方法についてヒントを与えてくれることを望んでいましたか??? データベース、列名などを再確認しました。どのようなものが線を引く可能性があるかを知る必要があります。

$result = $auth->authenticate($adapter);

死の白い画面になります??? 何か案は?application.ini ですべてのエラー表示をオンにしています。

このサーバーで Zend 1.11.12 を実行しています。それは違いがありますか?それが動作しているサーバーは1.12.0-9を実行しています

アイデアをお寄せいただきありがとうございます。

編集::: _getAuthAdapter のコードを追加しました。

4

4 に答える 4

2

アプリのエラー報告を有効にします。configs/application.ini ファイルですべてのエラー報告を 1 に設定します -

   phpSettings.display_startup_errors = 1
   phpSettings.display_errors = 1
   resources.frontController.params.displayExceptions = 1

また、true または false を返す代わりに、メッセージを出力するか、別のページにリダイレクトして確認してください。

$adapter で var_dump を試して、結果のオブジェクトを確認してください。

于 2012-10-25T05:24:36.593 に答える
0

私はZend_Auth認証に使用したことがありません。アダプターでそれを行うことができるはずです。$adapter(あなたがたとえばのインスタンスであると仮定しますZend_Auth_Adapter_DbTable

$adapter = $this->_getAuthAdapter();

// this will tell you if there's something wrong with your adapter
if (!($adapter instanceof Zend_Auth_Adapter_DbTable)) {
    throw new Exception('invalid adapter');
}

$adapter->setIdentity($values['username']);
$adapter->setCredential($values['password']);

$result = $adapter->authenticate();
if ($result->isValid()) {

}
于 2012-10-25T05:38:25.933 に答える
0

以下のようにしてみましたが、

  public function loginAction() {
        $this->_helper->layout->disableLayout();
        $users = new Application_Model_DbTable_Admin();
        $this->_redirector = $this->_helper->getHelper('Redirector');
        $form = new Application_Form_LoginForm();
        $this->view->form = $form;

        if ($this->getRequest()->isPost()) {
            if ($form->isValid($_POST)) {
                $consumer = new Zend_OpenId_Consumer();
                $username = $this->_request->getPost('username');
                $password = $this->_request->getPost('password');

                if ($username <> '' && $password <> '') {
                    $auth = Zend_Auth::getInstance();
                    $authAdapter = new Zend_Auth_Adapter_DbTable($users->getAdapter(), 'admin');
                    $authAdapter->setIdentityColumn('username')
                            ->setCredentialColumn('password');
                    $authAdapter->setIdentity($username)
                            ->setCredential(md5($password));
                    $result = $auth->authenticate($authAdapter);

                    if ($result->isValid()) {
                        $storage = new Zend_Auth_Storage_Session();
                        $storage->write($authAdapter->getResultRowObject());
                        $this->_auth_user = $auth->getStorage()->read();
                        $this->_redirect('admin/index/');
                    }
                    else
                        $this->view->errorMessage = "Invalid username or password. Please try again.";
                }
                else
                    $this->view->errorMessage = "Username or password should not be empty!!!.";
            }
        }
    }
于 2012-10-25T05:39:27.413 に答える
0

アダプターが機能しない場合は、試してください。

public function _getAuthAdapter() {
        $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
        $authAdapter->setTableName('table_name')
                ->setIdentityColumn('user_name')
                ->setCredentialColumn('password');
        return $authAdapter;
}

そしてapplication.iniで

resources.db.isDefaultTableAdapter = true
于 2012-10-25T06:06:22.217 に答える