RedirectionListener.php第46行中的FatalErrorException:错误:在非对象上调用成员函数getUser()

山姆

我在使用FOSUserBundle时遇到问题。

我有一个重定向侦听器,以防止用户在未登录的情况下使用该应用,这是以下代码:

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版本。谁能帮忙!

丹尼斯

您是否尝试将设置为access_control您的security.yml

例如:

security:
    #[...]

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        # and so on, until:
        - { path: ^/restricted, role: ROLE_USER }
        # or:
        - { path: ^/*, role: IS_AUTHENTICATED_ANONYMOUSLY }

编辑:不要忘记在进行更改后清除缓存。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章