waner
waner

Reputation: 67

infinite loop on a redirect route

i have a problem i dont know how to stop it. i have an infinite loop on a redirect route, i tried to redirect a user if he has not accept some condition this is my code :

 /**
     * AcceptanceListener constructor.
     * @param $router
     * @param TokenStorageInterface $tokenStorage
     * @param UserManager $userManager
     * @param AuthorizationChecker $checker
     */
    public function __construct(
        $router,
        TokenStorageInterface $tokenStorage,
        UserManager $userManager,
        AuthorizationChecker $checker
    ) {
        $this->router = $router;
        $this->tokenStorage = $tokenStorage;
        $this->userManager = $userManager;
        $this->role = $checker;
    }

    /**
     * To checked all the routes
     *
     * @param GetResponseEvent $event
     */
    public function onKernelRequest(GetResponseEvent $event)
    {
        $user = $this->tokenStorage->getToken()->getUser();
        if ($this->role->isGranted('ROLE_USER')
            && !$this->userManager->hasAccepted($user)
        ) {
            $this->redirect = $this->router->generate('accept_');
            $event->setResponse(new RedirectResponse($this->redirect));
        }
    }

someone can help me please?

Upvotes: 1

Views: 624

Answers (1)

Andrew Vakhniuk
Andrew Vakhniuk

Reputation: 594

Check if the route is not the same, then redirect

public function onKernelRequest(GetResponseEvent $event)
    {
        $route_name = $event->getRequest()->get('_route');

            if ($route_name != 'accept_') {

        $user = $this->tokenStorage->getToken()->getUser();
        if ($this->role->isGranted('ROLE_USER')
            && !$this->userManager->hasAccepted($user)
        ) {
            $this->redirect = $this->router->generate('accept_');
            $event->setResponse(new RedirectResponse($this->redirect));
        }
    }
}

Upvotes: 2

Related Questions