Ich migriere gerade eine Contao 3.5 Anwendung nach Contao 4.7.
Das System hat sehr viele Mails verschickt mit Links zu einem internen Kundenbereich. Der Kunde wollte, dass die Benutzer durch einen Token automatisch eingeloggt werden - was auch funktioniert (hat). Genutzt hatte ich dazu den initializeSystem Hook. Unter Contao 4.7 bekomme ich das nicht ans Laufen.
Ich kenne das Bundle von Richard Henkenjohann.
Allerdings wird hier eine eigene Route genutzt. Das ist auch gut so, aber ich kann die vielen Links mit Token nicht ins Leere laufen lassen. Daher möchte ich, dass wenn jemand die URL kunde.de/interneSeite.html?token=token automatisch eingeloggt wird und die Seite sieht. Ein Redirect auf die gleiche Seite wäre auch kein Problem. Den LoginToken habe ich an dieser Stelle schon geprüft.
Das habe ich aktuell versucht. Aber auch mit einem Redirect am Ende klappt es nicht. Hat jemand eine Idee?
PHP-Code:
$request = $this->requestStack->getCurrentRequest();
$user = $this->userProvider->loadUserByUsername($username);
$usernamePasswordToken = new UsernamePasswordToken($user, null, 'frontend', $user->getRoles());
$this->tokenStorage->setToken($usernamePasswordToken);
$event = new InteractiveLoginEvent($request, $usernamePasswordToken);
$this->dispatcher->dispatch('security.interactive_login', $event);
An einer anderen Stelle habe ich es hinbekommen mit dem Login. Beim Reservieren eines Produktes muss sich der Kunde zeitgleich registrieren (ein Formular in einer Lightbox). Für das Formular nutzte ich terminal42/contao-ajaxform und den processFormData Hook zum Anlegen und einloggen des Kunden. Anschließend wird der Hinweis von ajaxform angezeigt mit einem Link zur internen Kundenseite. Klickt der Kunde auf diesen Link, kommt er zur internen Seite und ist korrekt eingeloggt. Geht also.
In der gleichen Lightbox (anderer Reiter) kann sich der Kunde per Ajax einloggen und das Produkt, dann ohne Registrierung, reservieren. Hier nutze ich die _contao/login Route und checke den Login-Status per AJAX (da der Kunde ja sofort mit der Reservierung weitermachen soll. Klappt auch. Nur der Token-Login leider nicht.
Lesezeichen