可以(而且应该?)Zend_Auth将类作为标识返回?

时间:2009-10-19 20:17:34

标签: zend-framework oop zend-auth

我有一个类R00_Model_User,奇怪的是,它代表了用户。可以$ result-> getIdentity()返回此类的对象吗? (或者也许这很愚蠢?)

(R00_Model_User中有一个工厂方法可以防止重复对象。我希望Zend_Auth使用它而不是创建一个新对象,如果可以的话)

2 个答案:

答案 0 :(得分: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);
    }
    

答案 1 :(得分:0)

在我的一个应用程序中,我有getIdentity()返回一个用户对象,它对我来说效果很好。要使用您的工厂方法,请执行以下操作:

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

然后当你调用getIdentity()时,你将拥有你的用户对象。