我创建了一个“记住我”基于cookie的登录系统,我正在使用ZFc与ZfcUser和BjyAuthorize。 好吧,登录后,如果缓存过期,BjyAuthorize会在我的“记住我”系统之前触发,并且用户不会被识别为已登录。
这是我在AbstractController中调用“记住我”cookie系统的地方:https://gist.github.com/Gamempire/2b6b6388cedca9491d5f#file-abstractcontroller-php-L18(每个控制器扩展我的AbstractController)
我怎样才能在BjyAuthorize之前调用它,所以BjyAuthorize知道有人登录了?
由于
答案 0 :(得分:1)
为了做到这一点,我不会在bjyAuthorize之前尝试注入自己 最好添加到ZfcUser功能并使用storageChain来获取用户的身份。
首先覆盖ZfcUser的服务名称
'service_manager' => array(
'factories' => array(
'zfcuser_auth_service' => 'myNamespace\Factory\AuthenticationServiceFactory',
),
),
在此之后你需要创建自己的工厂基本上你可以复制ZfcUser并改变它
public function createService(ServiceLocatorInterface $serviceLocator)
{
$storageChain = new \Zend\Authentication\Storage\Chain();
// dummy storage interface
$nonPersistent = new \Zend\Authentication\Storage\NonPersistent(); // replace this with your own storage interface.
$nonPersistent->write(1); // just to test
/* @var $authStorage Storage\StorageInterface */
$authStorage = $serviceLocator->get('ZfcUser\Authentication\Storage\Db');
$storageChain->add($authStorage, 10); // Check this interface first.
$storageChain->add($nonPersistent, 0); // Check this interface Second.
/* @var $authAdapter Adapter\AdapterInterface */
$authAdapter = $serviceLocator->get('ZfcUser\Authentication\Adapter\AdapterChain');
return new AuthenticationService(
$storageChain,
$authAdapter
);
}
使用此示例代码,当用户没有登录会话时,执行$this->zfcUserAuthentication()->getIdentity()
将返回1。
在此之后,您需要创建自己的存储界面。它实现了Zend \ Authentication \ Storage \ StorageInterface。我不知道你的cookie实现是如何的,你需要适应它。您还需要实现何时使用cookie以及何时不使用cookie。还有一个为zfcuser制作的模块,它实现了一个名为GoalioRememberMe的记住我的函数。我希望这会对你有所帮助。