Zend身份验证返回白屏

时间:2012-10-25 04:41:35

标签: zend-framework zend-auth

这是最令人沮丧的。当你得到的只是白屏时,几乎不可能找到错误!!!

此代码用于其他项目,它在那里工作正常,语法上,它是正确的。但是配置中的SOMETHING一定是错的......

以下是代码:

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;
}

这是在我的auth控制器中,并在设置适配器等后调用。如果我放了一个骰子(“foo”);就在$ result行之前,我看到了。如果我把它放在$ result行之后,我得到一个WSOD并且系统停止。我知道这里没有足够的人来调试我的代码,但我希望其他人有这个问题,并可以给我一个提示,试图解决这个问题???我已经仔细检查了数据库,列名等。我需要知道哪些东西可以成为一行:

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

导致白屏死机???有任何想法吗?我在application.ini中打开了所有错误显示。

我在这台服务器上运行Zend 1.11.12。这有什么区别吗?正在运行的服务器正在运行1.12.0-9

感谢您提出的任何想法。

编辑:::我为我的_getAuthAdapter添加了代码。

4 个答案:

答案 0 :(得分:2)

启用应用的错误报告。在configs / application.ini文件中将所有错误报告设置为1 -

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

此外,不是返回true或false,而是尝试打印消息,或重定向到其他页面以了解。

在$ adapter上尝试使用var_dump来查看生成的对象。

答案 1 :(得分:0)

我从未使用Zend_Auth进行身份验证。您应该能够使用适配器执行此操作。 (假设您的$adapterZend_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()) {

}

答案 2 :(得分: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!!!.";
            }
        }
    }

答案 3 :(得分: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