Zend_Auth: структура таблицы БД - PullRequest
1 голос
/ 20 августа 2009

Так следовали все основные уроки. Я использую Zend 1.8, но я продолжаю получать это исключение при использовании Zend_Auth_DB. Любые идеи, в таблице только одна строка.

Exception information:

Message: The supplied parameters to Zend_Auth_Adapter_DbTable failed to produce a valid sql statement, please check table and column names for validity.

Stack trace:

#0 C:\projects\BHAA_ZEND\library\Zend\Auth\Adapter\DbTable.php(306): Zend_Auth_Adapter_DbTable->_authenticateQuerySelect(Object(Zend_Db_Select))
#1 C:\projects\BHAA_ZEND\library\Zend\Auth.php(117): Zend_Auth_Adapter_DbTable->authenticate()
#2 C:\projects\BHAA_ZEND\application\controllers\LoginController.php(79): Zend_Auth->authenticate(Object(Zend_Auth_Adapter_DbTable))
#3 C:\projects\BHAA_ZEND\application\controllers\LoginController.php(38): LoginController->getAuthAdapter(Array)
#4 C:\projects\BHAA_ZEND\library\Zend\Controller\Action.php(512): LoginController->processAction()
#5 C:\projects\BHAA_ZEND\library\Zend\Controller\Dispatcher\Standard.php(288): Zend_Controller_Action->dispatch('processAction')
#6 C:\projects\BHAA_ZEND\library\Zend\Controller\Front.php(945): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#7 C:\projects\BHAA_ZEND\library\Zend\Application\Bootstrap\Bootstrap.php(77): Zend_Controller_Front->dispatch()
#8 C:\projects\BHAA_ZEND\library\Zend\Application.php(328): Zend_Application_Bootstrap_Bootstrap->run()
#9 C:\projects\BHAA_ZEND\public\index.php(33): Zend_Application->run()
#10 {main} 

Вот код ошибки.

public function getAuthAdapter(array $params)
{
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);

    $authAdapter->setTableName('login')
                ->setIdentityColumn('username')
                ->setCredentialColumn('password');
                //->setCredentialTreatment('MD5(?)');
    // pass to the adapter the submitted username and password
    $authAdapter->setIdentity($username)->setCredential($password);

    $auth = Zend_Auth::getInstance();
    $result = $auth->authenticate($authAdapter);
    if ($result->isValid()) {
                 // success : store database row to auth's storage system
                 // (not the password though!)
                 $data = $authAdapter->getResultRowObject(null, 'password');
                 $auth->getStorage()->write($data);
                 //$this->_redirect('/');
                 return $this->_helper->redirector('index','index');
             } else {
                 // failure: clear database row from session
                 $this->view->message = 'Login failed.';
                 return $this->render('index');
             }
    return $result;
}

Вы читали документацию для Zend_Auth_Adapter_DbTable? - Да, но я не уверен, что это очистило или замутило мое понимание.

У вас есть действительное подключение к базе данных? - Да, есть работающее приложение CRUD с той же конфигурацией БД.

Какова структура вашей таблицы пользователей? -

Правильно ли вы указали столбцы идентификаторов и учетные данные для конструктора Zend_Auth_Adapter_DbTable? - Смотри код выше, я верю.

Вы также указали имя пользователя / пароль, который вы пытаетесь аутентифицировать? - Да, есть форма Zend, отправляющая эти переменные.

Что за SQL-запрос вызывает ошибку? Я думаю, что это так.

SELECT `isp_partners_view`.*, (CASE WHEN `password` = '*****' THEN 1 ELSE 0 END) AS `zend_auth_credential_match` FROM `isp_partners_view` WHERE (`username` = '*****')

1 Ответ

4 голосов
/ 21 августа 2009

Вы сообщили об ошибке, но есть ряд других вопросов, которые я бы попросил попытаться устранить эту проблему:

  • Вы прочитали документацию для Zend_Auth_Adapter_DbTable?

  • У вас есть действительное соединение с базой данных?

  • Какова структура вашего users стола?

  • Правильно ли указаны столбцы идентификаторов и учетные данные для конструктора Zend_Auth_Adapter_DbTable?

  • Вы также указали имя пользователя / пароль, который вы пытаетесь аутентифицировать?

  • Какой SQL-запрос вызывает ошибку? Вы можете просмотреть запрос следующим образом:

    $select = $authAdapter->getDbSelect();
    print $select . "\n";
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...