У меня проблема с FOSUserBundle.FatalErrorException в RedirectionListener.php строка 46: Ошибка: вызов функции-члена getUser() для не-объекта
У меня есть переназначения слушателя, чтобы запретить пользователям использовать приложение без входа в систему, вот код:
class RedirectionListener
{
/**
* RedirectionListener constructor.
* @param ContainerInterface $container
* @throws \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
* @throws \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
*/
public function __construct(ContainerInterface $container)
{
$this->router = $container->get('router');
$this->securityTokenStorage = $container->get('security.token_storage');
}
/**
* @param GetResponseEvent $event
* @throws \InvalidArgumentException
*/
public function onKernelRequest(GetResponseEvent $event){
$route = $event->getRequest()->attributes->get('_route');
if($route !== 'fos_user_security_login' &&
$route !== 'fos_user_resetting_reset' &&
$route !== 'fos_user_resetting_request' &&
$route !== 'fos_user_resetting_send_email' &&
$route !== 'fos_user_resetting_check_email' &&
$route !== 'fos_user_change_password' &&
!is_object($this->securityTokenStorage->getToken()->getUser())) //this is line 46
{
$event->setResponse(new RedirectResponse($this->router->generate('fos_user_security_login')));
}
}
}
Это моя служба:
services:
redirectonListener:
class: Projects\ProjectsBundle\Listener\RedirectionListener
arguments: ['@service_container']
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
А вот мои настройки брандмауэра из FOSUserBundle Docs:
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
# if you are using Symfony < 2.8, use the following config instead:
# csrf_provider: form.csrf_provider
logout: true
anonymous: true
Я использую версию Symfony 2.8. Может кто поможет!
В конструкторе: var_dump ($ container-> get ('security.token_storage')); что говорит? – Deep
Я мог ошибаться, но разве вы не можете это проверить? if ($ this-> get ('security.authorization_checker') -> isGranted ('IS_AUTHENTICATED_FULLY') === false) – Thomas
@Deep вот результат var_dump: 'object (Symfony \ Component \ Security \ Core \ Authentication \ Token \ Storage \ TokenStorage) # 264 (1) {["токен": "Symfony \ Component \ Security \ Core \ Authentication \ Token \ Storage \ TokenStorage": private] => NULL} ' –