Zend framework 创建自己的Zend_Auth_适配器

Zend framework 创建自己的Zend_Auth_适配器,zend-framework,authentication,Zend Framework,Authentication,我在创建自己的Zend_Auth_适配器时遇到困难。我也在用教义2。到目前为止我已经。。。代码如下 我发现了错误 方法“hasIdentity”不存在,并且未被困在_调用()中 怎么了 use \Doctrine\ORM; class Application_Auth_Adapter implements Zend_Auth_Adapter_Interface { private $username; private $password; function __cons

我在创建自己的Zend_Auth_适配器时遇到困难。我也在用教义2。到目前为止我已经。。。代码如下

我发现了错误

方法“hasIdentity”不存在,并且未被困在_调用()中

怎么了

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);
        }
    }
} 
更新 我注意到问题来自于Zend_Auth的abt第123行

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->hasintity()它试图从
AuthController
调用
hasintity()

我找到了原因!查看我的更新。。。堆栈跟踪。我调用一个方法,就好像它是静态的一样。这不会产生错误吗?无论如何。。。我该怎么办


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

我找到了原因!查看我的更新。。。堆栈跟踪。我调用一个方法,就好像它是静态的一样。这不会产生错误吗?无论如何。。。我该怎么办


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

不错的适配器,尽管我建议$user->getPassword()和$user->getSalt()

不错的适配器,尽管我建议$user->getPassword()和$user->getSalt()

是的,我已经将所有神奇的方法
\uu get()\uu set()
转换为
get*()set*(
,谢谢你的补充。欢迎使用stackoverflowyes not我已经将所有神奇的方法
\uuu get()\uu set()
转换为
get*()set*()
,谢谢你的补充。欢迎来到stackoverflow