2009-10-19 36 views
0

我有一个R00_Model_User类,它足够好奇地代表用户,因为他是。 $ result-> getIdentity()可以返回这个类的一个对象吗? (或者,也许这是愚蠢的?)可以(也应该?)Zend_Auth返回类作为身份?

(有一个在R00_Model_User一个工厂方法,从复制对象阻止。我想Zend_Auth的使用它,而不是创建一个新的对象,如果它可以)

回答

2

两个选项:

  • 编写自己的认证适配器子类外的开箱适配器,您的情况最匹配

    class R00_Auth_Adapter extends Zend_Auth_Adapter_* 
    { 
        /** 
        * authenticate() - defined by Zend_Auth_Adapter_Interface. This method is called to 
        * attempt an authentication. Previous to this call, this adapter would have already 
        * been configured with all necessary information to successfully connect to a database 
        * table and attempt to find a record matching the provided identity. 
        * 
        * @throws Zend_Auth_Adapter_Exception if answering the authentication query is impossible 
        * @return Zend_Auth_Result 
        */ 
        public function authenticate() 
        { 
         $result = parent::authenticate(); 
         if ($result->isValid() { 
          return new Zend_Auth_Result(
           $result->getCode(), 
           R00_Model_User::load($result->getIdentity()), 
           $result->getMessages() 
          ); 
         } else { 
          return $result; 
         } 
        } 
    } 
    

    这将使你的代码

    $adapter = new R00_Auth_Adapter(); 
    //... adapter initialisation (username, password, etc.) 
    $result = Zend_Auth::getInstance()->authenticate($adapter); 
    

    和成功的身份验证您的用户对象会自动存储在认证(默认会话)。

  • 或使用您的登录动作来更新存储的用户身份

    $adapter = new Zend_Auth_Adapter_*(); 
    $result = $adapter->authenticate(); 
    if ($result->isValid()) { 
        $user = R00_Model_User::load($result->getIdentity()); 
        Zend_Auth::getInstance()->getStorage()->write($user); 
    } 
    
0

在一个我的应用程序,我有getIdentity()返回一个用户对象,它对我来说工作得很好。要使用你的工厂方法,这样做:

$auth = Zend_Auth::getInstance(); 
$user = R00_Model_User::getInstance(...); 
$auth->getStorage()->write($user); 

然后当你调用的getIdentity(),你有你自己的用户对象。

+0

嗯。您不使用ZF的授权代码并自行完成,是吗?我会考虑它,但它似乎并不是一个ZF方式:) – 2009-10-19 20:29:09

+0

我不确定你的意思?我正在使用Zend_Auth,但只是存储一个对象而不是字符串。默认情况下为 – 2009-10-19 21:40:46

+0

Z_Auth存储用户名。如果您只想将密码保存到会话中(不要这么做),您必须使用它。这是做到这一点的唯一方法。见手册;) 甚至更​​多。如果扩展它,您可以获取用户对象并将其传递给认证对象;) – 2009-10-19 21:53:55