Я создал систему входа в систему, основанную на cookie, и использую ZF2 с ZfcUser и BjyAuthorize.
Что ж, после входа в систему, если срок действия кэша истекает, BjyAuthorize вызывает мою систему «Запомнить меня», и пользователь не распознается как вошедший в систему.
Вот где я вызываю систему cookie «Запомнить меня» в моем AbstractController: https://gist.github.com/Gamempire/2b6b6388cedca9491d5f#file-abstractcontroller-php-L18 (каждый контроллер расширяет мой AbstractController)
Как я могу позвонить до BjyAuthorize, чтобы BjyAuthorize знал, что кто-то вошел в систему?
Спасибо
Чтобы сделать это правильно, я бы не стал пытаться делать инъекцию до того, как 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, и вам необходимо адаптировать ее к этому. Также вам нужно будет решить, когда использовать куки, а когда нет. Существует также модуль, созданный для zfcuser, который реализует функцию запомнить меня с именем GoalioRememberMe. Я надеюсь, это поможет вам.
Других решений пока нет …