这是最令人沮丧的。当你得到的只是白屏时,几乎不可能找到错误!!!
此代码用于其他项目,它在那里工作正常,语法上,它是正确的。但是配置中的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添加了代码。
答案 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
进行身份验证。您应该能够使用适配器执行此操作。 (假设您的$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()) {
}
答案 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