2012-10-25 83 views
1

這是有史以來最令人沮喪的。當你所得到的只是一個白屏時,幾乎不可能發現錯誤!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; 
} 

這是我的身份驗證控制器和被調用後,我設置適配器等。如果我把一個模具( 「foo」 的);在$結果行之前,我看到它。如果我把它放在$ result行的後面,我會得到一個WSOD並停止系統。我知道這裏沒有足夠的人來調試我的代碼,但我希望別人有這個問題,並可以給我一個提示,以試圖解決這個問題?我有雙重檢查數據庫,列名等。我需要知道什麼樣的事情可以做線:

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

導致死亡的白色屏幕???有任何想法嗎?我在application.ini中打開了所有錯誤顯示。

我在此服務器上運行Zend 1.11.12。這有什麼區別嗎?在那裏,它正在運行的服務器正在運行1.12.0-9

感謝您的任何想法。

編輯:::我添加代碼爲我_getAuthAdapter。

+1

張貼'_getAuthAdapter()'函數也許這裏的問題是 –

+0

嘗試'$ adapter'一個'var_dump'並檢查返回的對象是'Zend_Auth_Adapter_DbTable' –

+1

任何錯誤在Apache的錯誤日誌? –

回答

2

爲您的應用啓用錯誤報告。設置爲1,所有錯誤報告在CONFIGS /的application.ini文件 -

phpSettings.display_startup_errors = 1 
    phpSettings.display_errors = 1 
    resources.frontController.params.displayExceptions = 1 

此外,而不是返回true或false,嘗試打印一個消息,或重定向到一個不同的頁面就知道了。

嘗試$適配器上的var_dump看到生成的對象。

+0

問題最終成爲密碼字段中的錯誤字段名稱。轉儲$適配器是什麼幫助我找到它。 –

0

我從來沒有用過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()) { 

} 
+0

Downvoter,關心評論? –

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