From cf2c3050e2b5b0d28ef3a302b8f6a93451c4fde4 Mon Sep 17 00:00:00 2001 From: Gerrit Mohrmann <mohrmann.t3@gmx.de> Date: Tue, 14 Apr 2020 17:10:25 +0200 Subject: [PATCH] [BUGFIX] Move redirects in extbase felogin after the events To fire the LoginConfirmedEvent and LogoutConfirmedEvent even when redirects are active the redirect handling are moved after the events. Resolves: #91023 Releases: master Change-Id: I11fd2aba206edb68426039de7dbfa6e92d79c8a7 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64165 Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Susanne Moog <look@susi.dev> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Jonas Eberle <flightvision@googlemail.com> Reviewed-by: Guido Schmechel <guido.schmechel@brandung.de> Reviewed-by: Susanne Moog <look@susi.dev> Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Benni Mack <benni@typo3.org> --- .../Classes/Controller/LoginController.php | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/typo3/sysext/felogin/Classes/Controller/LoginController.php b/typo3/sysext/felogin/Classes/Controller/LoginController.php index f3bb4368d348..dc35fd4cf959 100644 --- a/typo3/sysext/felogin/Classes/Controller/LoginController.php +++ b/typo3/sysext/felogin/Classes/Controller/LoginController.php @@ -63,6 +63,11 @@ class LoginController extends AbstractLoginFormController */ protected $loginType = ''; + /** + * @var string + */ + protected $redirectUrl = ''; + /** * @var ServerRequestHandler */ @@ -120,15 +125,11 @@ class LoginController extends AbstractLoginFormController return; } - $redirectUrl = $this->redirectHandler->processRedirect( + $this->redirectUrl = $this->redirectHandler->processRedirect( $this->loginType, $this->configuration, $this->request->hasArgument('redirectReferrer') ? $this->request->getArgument('redirectReferrer') : '' ); - if ($redirectUrl !== '') { - $this->eventDispatcher->dispatch(new BeforeRedirectEvent($this->loginType, $redirectUrl)); - $this->redirectToUri($redirectUrl); - } } } @@ -144,6 +145,7 @@ class LoginController extends AbstractLoginFormController } $this->handleLoginForwards(); + $this->handleRedirect(); $this->eventDispatcher->dispatch(new ModifyLoginFormViewEvent($this->view)); @@ -174,6 +176,7 @@ class LoginController extends AbstractLoginFormController } $this->eventDispatcher->dispatch(new LoginConfirmedEvent($this, $this->view)); + $this->handleRedirect(); $this->view->assignMultiple( [ @@ -190,6 +193,8 @@ class LoginController extends AbstractLoginFormController */ public function logoutAction(int $redirectPageLogout = 0): void { + $this->handleRedirect(); + $this->view->assignMultiple( [ 'cookieWarning' => $this->showCookieWarning, @@ -201,6 +206,17 @@ class LoginController extends AbstractLoginFormController ); } + /** + * Handles the redirect when $this->redirectUrl is not empty + */ + protected function handleRedirect(): void + { + if ($this->redirectUrl !== '') { + $this->eventDispatcher->dispatch(new BeforeRedirectEvent($this->loginType, $this->redirectUrl)); + $this->redirectToUri($this->redirectUrl); + } + } + /** * Handle forwards to overview and logout actions from login action */ -- GitLab