Zend authenticate возвращает белый экран
Это самый неприятный из всех. Почти невозможно найти ошибки, когда все, что вы получаете, это белый экран!!!
Этот код используется в других проектах, и он прекрасно работает там, так что синтаксически, это правильно. Но что-то должно быть неправильно в конфигурации...
Вот код:
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;
}
Это находится в моем контроллере аутентификации и вызывается после того, как я установил адаптер и т. Д. Если я вставлю кристалл ("foo"); прямо перед строкой $result, я вижу это. Если я поставлю его сразу после строки результата $, я получу WSOD, и система остановится. Я знаю, что здесь недостаточно для того, чтобы кто-нибудь мог отладить мой код, но я надеялся, что у кого-то еще возникла эта проблема, и он мог бы дать мне подсказку о том, что пытаться исправить это??? Я дважды проверил базу данных, имена столбцов и т. Д. Мне нужно знать, что может сделать строка:
$result = $auth->authenticate($adapter);
в результате белый экран смерти??? Есть идеи? У меня все отображение ошибок включено в application.ini.
Я использую Zend 1.11.12 на этом сервере. Это имеет значение? Сервер, на котором он работает, работает 1.12.0-9
Спасибо за любые идеи, которые вы могли бы иметь.
РЕДАКТИРОВАТЬ::: Я добавил код для моего _getAuthAdapter.
4 ответа
Включите отчеты об ошибках для вашего приложения. Установите для всех отчетов об ошибках 1 в файле configs/application.ini -
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
Кроме того, вместо того, чтобы возвращать true или false, попробуйте напечатать сообщение или перенаправить на другую страницу, чтобы узнать.
Попробуйте var_dump на адаптере $, чтобы увидеть полученный объект.
Если ваш адаптер не работает, попробуйте:
public function _getAuthAdapter() {
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('table_name')
->setIdentityColumn('user_name')
->setCredentialColumn('password');
return $authAdapter;
}
И в приложении.ini
resources.db.isDefaultTableAdapter = true
Я пытался, как показано ниже,
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!!!.";
}
}
}
Я никогда не использовал 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()) {
}