为了正确地做到这一点,我不会只是尝试在 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()
当没有 Session 登录用户时,doing 将返回 1。
在此之后,您将需要创建自己的存储接口。它实现了 Zend\Authentication\Storage\StorageInterface。我不知道您的 cookie 实现如何,您需要对其进行调整。您还需要实施何时使用 cookie 以及何时不使用。还有一个为 zfcuser 制作的模块,它实现了一个名为GoalioRememberMe的记住我的函数。我希望这可以帮助你。