2010-07-25 5 views
1

У меня возникли трудности с созданием собственного Zend_Auth_Adapter. Я также использую Doctrine 2. До сих пор я ... ниже кодСоздание собственного Zend_Auth_Adapter

я получаю ошибку

Метод «hasIdentity» не существует и не был пойман в ловушку __call()

что не так?

use \Doctrine\ORM; 
class Application_Auth_Adapter implements Zend_Auth_Adapter_Interface { 
    private $username; 
    private $password; 

    function __construct($username, $password) { 
     $this->username = $username; 
     $this->password = $password; 
    } 

    function authenticate() { 
     $em = Zend_Registry::get('em'); 
     $query = $em->createQuery('select u from Application\Entities\User u WHERE u.name = :username') 
        ->setParameter('username', $this->username); 
     try { 
      $user = $query->getSingleResult(); 
      $salt = $user->salt; 
      $hashedPassword = hash_hmac('sha256', $this->password, $salt); 
      if ($hashedPassword == $user->password) { 
       // login success 
       return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS, $user); 
      } else { 
       // wrong password 
       return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID, null); 
      } 
     } catch (NonUniqueResultException $e) { 
      // non unique result 
      return new Zend_Auth_Result(Zend_Auth_Result::FAILURE, null); 
     } catch (NoResultException $e) { 
      // no result found 
      return new Zend_Auth_Result(Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND, null); 
     } catch (Exception $e) { 
      // exception occured 
      return new Zend_Auth_Result(Zend_Auth_Result::FAILURE, null); 
     } 
    } 
} 

UPDATE

я заметил, что проблема возникает из-прим линии 123 Zend_Auth

if ($this->hasIdentity()) { 
    $this->clearIdentity(); 
} 

но чуть ниже этой функции, authenticate(), его

public function hasIdentity() 

я заметил что-то странно с трассировкой стека

#0 [internal function]: Zend_Controller_Action->__call('hasIdentity', Array) 
#1 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Auth.php(123): AuthController->hasIdentity() 
#2 D:\Projects\Websites\php\ZendFramework\LearningZF\application\controllers\AuthController.php(23): Zend_Auth->authenticate(Object(Application_Auth_Adapter)) 
#3 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Controller\Action.php(513): AuthController->loginAction() 
#4 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('loginAction') 
#5 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#6 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#7 D:\ResourceLibrary\Frameworks\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#8 D:\Projects\Websites\php\ZendFramework\LearningZF\public\index.php(26): Zend_Application->run() 
#9 {main} 

см AuthController-> hasIdentity() его пытается вызвать hasIdentity() от AuthController!

ответ

1

Я узнал, почему! см. мое обновление ... трассировка стека. Я вызываю метод, как если бы он был статичным. это не ошибка? anyways ... i shld do

$ result = Zend_Auth :: getInstance() -> authenticate ($ adapter);

0

Хороший адаптер, хотя я предлагаю $ user-> GetPassword() и $ user-> getSalt()

+0

да не я преобразовал все магические методы '__get() __set()' 'для получения *() набор *() 'уже, спасибо за дополнение тоже. Добро пожаловать в stackoverflow –

Смежные вопросы