['onKernelRequest'] ]; } public function onKernelRequest(RequestEvent $event): void { // ignore sub-requests if (!$event->isMainRequest()) { return; } // ignore events like the toolbar where we do not have a token if (null === ($token = $this->storage->getToken())) { return; } $uri = $event->getRequest()->getRequestUri(); // never require 2FA on API calls if (str_starts_with($uri, '/api/') || stripos($uri, '/register/') !== false || stripos($uri, '/wizard/') !== false) { return; } $user = $token->getUser(); if (!($user instanceof User)) { return; } if (!$this->security->isGranted('IS_AUTHENTICATED_FULLY')) { return; } if ($user->requiresPasswordReset()) { $response = new RedirectResponse($this->urlGenerator->generate('wizard', ['wizard' => 'password'])); $event->setResponse($response); } if ($user->isRegularUserOnly() && !$this->systemConfiguration->isUserWizardActive()) { return; } foreach (User::WIZARDS as $wizard) { if (!$user->hasSeenWizard($wizard)) { $response = new RedirectResponse($this->urlGenerator->generate('wizard', ['wizard' => $wizard])); $event->setResponse($response); return; } } } }