Symfony2: Check user authentication based on path

后端 未结 3 596
悲哀的现实
悲哀的现实 2020-12-06 03:02

in Symfony2, is it possible to check if user is authenticated to access the URl he requested. What I want to do is, i dont want to allow a logged in user to go back to regis

3条回答
  •  情书的邮戳
    2020-12-06 03:45

    Maybe this will help someone. I just catch route name and check if they are in array. If yes just redirect. This is event listener.

    services.yml

    project.loggedin_listener:
          class: Project\FrontBundle\EventListener\LoggedInListener
          arguments: [ "@router", "@service_container" ]
          tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
    

    listener:

    namespace Project\FrontBundle\EventListener;
    use Symfony\Component\HttpKernel\Event\GetResponseEvent;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    
    class LoggedInListener {
        private $router;
        private $container;
    
        public function __construct($router, $container)
        {
            $this->router = $router;
            $this->container = $container;
        }
    
        public function onKernelRequest(GetResponseEvent $event)
        {
            $container = $this->container;
            $accountRouteName = "_homepage";
    
            if( $container->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY') ){
    
                $routeName = $container->get('request')->get('_route');
                $routes = array("admin_login","fos_user_security_login","fos_user_registration_register","fos_user_resetting_request");
                if(in_array($routeName, $routes)){
                    $url = $this->router->generate($accountRouteName);
                    $event->setResponse(new RedirectResponse($url));
                }
    
            }
    
        }
    }
    

提交回复
热议问题