Zend framework Zend验证返回白色屏幕

Zend framework Zend验证返回白色屏幕,zend-framework,zend-auth,Zend Framework,Zend Auth,这是有史以来最令人沮丧的一次。当你得到的只是一个白色的屏幕时,几乎不可能找到错误 此代码用于其他项目,在语法上很好,是正确的。但配置中一定有问题 代码如下: protected function _process($values) { // Get our authentication adapter and check credentials $adapter = $this->_getAuthAdapter(); $adapter->setIdentity

这是有史以来最令人沮丧的一次。当你得到的只是一个白色的屏幕时,几乎不可能找到错误

此代码用于其他项目,在语法上很好,是正确的。但配置中一定有问题

代码如下:

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控制器中,在我设置适配器后被调用,等等,如果我放置一个die(“foo”);就在$result行之前,我看到了它。如果我把它放在$result行之后,就会得到一个WSOD,系统就会停止。我知道这里没有足够的东西让任何人调试我的代码,但我希望其他人也有这个问题,并能给我一个提示,告诉我如何解决这个问题???我已经仔细检查了数据库、列名等。我需要知道什么样的事情可能会导致这一行:

$result = $auth->authenticate($adapter);
导致死亡的白色屏幕???有什么想法吗?我在application.ini中打开了所有错误显示

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

谢谢你的任何想法


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

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

   phpSettings.display_startup_errors = 1
   phpSettings.display_errors = 1
   resources.frontController.params.displayExceptions = 1
此外,不要返回true或false,而是尝试打印消息,或重定向到其他页面以了解情况


尝试在$adapter上进行var_转储以查看结果对象。

我从未使用过
Zend_Auth
进行身份验证。您应该能够使用适配器实现这一点。(例如,假设您的
$adapter
Zend\u Auth\u adapter\u DbTable
的一个实例)

我试着像下面一样

  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!!!.";
            }
        }
    }
公共函数登录(){
$this->_helper->layout->disableLayout();
$users=新应用程序\模型\数据库\管理();
$this->_redirector=$this->_helper->getHelper('redirector');
$form=新应用程序\表单\登录表单();
$this->view->form=$form;
如果($this->getRequest()->isPost()){
如果($form->isValid($\u POST)){
$consumer=new Zend_OpenId_consumer();
$username=$this->_请求->getPost('username');
$password=$this->_request->getPost('password');
如果($username''&&$password''){
$auth=Zend_auth::getInstance();
$authAdapter=new Zend_Auth_Adapter_DbTable($users->getAdapter(),'admin');
$authAdapter->setIdentityColumn('username'))
->setCredentialColumn(“密码”);
$authAdapter->setIdentity($username)
->设置凭证(md5($password));
$result=$auth->authenticate($authAdapter);
如果($result->isValid()){
$storage=new Zend_Auth_storage_Session();
$storage->write($authAdapter->getResultRowObject());
$this->_auth_user=$auth->getStorage()->read();
$this->_重定向('admin/index/');
}
其他的
$this->view->errorMessage=“用户名或密码无效。请重试。”;
}
其他的
$this->view->errorMessage=“用户名或密码不应为空!!!”;
}
}
}

如果适配器不工作,请尝试:

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

发布
\u getAuthAdapter()
函数可能是问题所在尝试
$adapter
上的
var\u dump
并检查返回的对象是否是
Zend\u Auth\u adapter\u DbTable
Apache错误日志中的任何错误?您知道Zend\u Auth没有返回任何内容吗?我没有看到您的代码,只是说:)如果您的Auth返回空对象(而不是Zend_Auth_Result对象),您可能会看到一个白色屏幕。您的问题的答案很可能围绕着auth适配器的构造,没有这些代码,您就不可能得到真正可靠的答案。只是很多猜测。问题是密码字段中的字段名不正确。甩掉$adapter帮我找到了它。
resources.db.isDefaultTableAdapter = true