我有一个R00_Model_User类,它足够好奇地代表用户,因为他是。 $ result-> getIdentity()可以返回这个类的一个对象吗? (或者,也许这是愚蠢的?)可以(也应该?)Zend_Auth返回类作为身份?
(有一个在R00_Model_User一个工厂方法,从复制对象阻止。我想Zend_Auth的使用它,而不是创建一个新的对象,如果它可以)
我有一个R00_Model_User类,它足够好奇地代表用户,因为他是。 $ result-> getIdentity()可以返回这个类的一个对象吗? (或者,也许这是愚蠢的?)可以(也应该?)Zend_Auth返回类作为身份?
(有一个在R00_Model_User一个工厂方法,从复制对象阻止。我想Zend_Auth的使用它,而不是创建一个新的对象,如果它可以)
两个选项:
编写自己的认证适配器子类外的开箱适配器,您的情况最匹配
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);
}
在一个我的应用程序,我有getIdentity()返回一个用户对象,它对我来说工作得很好。要使用你的工厂方法,这样做:
$auth = Zend_Auth::getInstance();
$user = R00_Model_User::getInstance(...);
$auth->getStorage()->write($user);
然后当你调用的getIdentity(),你有你自己的用户对象。
嗯。您不使用ZF的授权代码并自行完成,是吗?我会考虑它,但它似乎并不是一个ZF方式:) – 2009-10-19 20:29:09
我不确定你的意思?我正在使用Zend_Auth,但只是存储一个对象而不是字符串。默认情况下为 – 2009-10-19 21:40:46
Z_Auth存储用户名。如果您只想将密码保存到会话中(不要这么做),您必须使用它。这是做到这一点的唯一方法。见手册;) 甚至更多。如果扩展它,您可以获取用户对象并将其传递给认证对象;) – 2009-10-19 21:53:55