Zend身份验证返回白屏



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

此代码在其他项目上使用,并且在句法上可以正常工作,这是正确的。但是配置中一定有问题...

这是代码:

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");就在$结果线之前,我看到了。如果我在$结果线之后立即将其放置,我会得到一个WSOD,并且系统停止。我知道这里没有足够的人可以调试我的代码,但是我希望别人遇到了这个问题,可以给我一个提示要解决这个问题的方法???我已经仔细检查了数据库,列名等。我需要知道哪些类型可能会导致行:

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

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

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

感谢您可能拥有的任何想法。

edit :::我为我的_getauthadapter添加了代码。

启用应用程序的错误报告。将所有错误报告在您的configs/application.ini文件 -

中设置为1
   phpSettings.display_startup_errors = 1
   phpSettings.display_errors = 1
   resources.frontController.params.displayExceptions = 1

另外,尝试打印消息或重定向到另一个页面以了解。

尝试$适配器上的var_dump查看结果对象。

我从未使用过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()) {
}

我尝试了下面的尝试,

  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!!!.";
            }
        }
    }

如果您的适配器不起作用,请尝试:

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

最新更新