Typo3: einen Frontend User (felogin) manuell einloggen – mit und ohne Cookie

13. Mai 2015

Auf einer Seite musste ein Frontend-Login nicht nur über ein Formular erfolgen, sondern es sollten zusätzlich auf Social-Media-Logins (Facebook und Google Plus) implementiert werden. Daher mussten die User im extbase controller manuell eingeloggt werden. Das stellte sich als gar nicht so einfach raus, anscheinend wird kein Session-Cookie mehr gesetzt und beim Seitenreload bzw. einer Weiterleitung auf eine andere Seite, gingen die Logindaten verloren. Im Hintergrund stand ein Typo3 Version 6.2.12 und anscheinend gibt es bereits diverse Bugreports zu diesem Problem. Indem man einen dummy Cookie setzt, kann man das Setzen des Cookies erzwingen, und mit dem Flag is_permanent kann man auch bestimmen, ob es ein permanentes Cookie werden soll, oder eben nur ein session cookie. Hier meine Funktion loginUser, die einen User nach erfolgreicher Authentifizierung (korrekte Username/Passwort Kombo überprüfe ich schon vorher) einloggt:

  1. public function loginUser($user) {
  2. $userArray = array('uid' => $user->getUid());
  3. //1 for a permanent cookie, 0 for session cookie
  4. $GLOBALS['TSFE']->fe_user->is_permanent = $user->getRememberMe();
  5. $GLOBALS['TSFE']->fe_user->checkPid = 0;
  6. $GLOBALS['TSFE']->fe_user->createUserSession($userArray);
  7. $GLOBALS['TSFE']->fe_user->user = $GLOBALS['TSFE']->fe_user->fetchUserSession();
  8. $GLOBALS['TSFE']->fe_user->fetchGroupData();
  9. $GLOBALS['TSFE']->loginUser = true;
  10. //set a dummy cookie
  11. $GLOBALS['TSFE']->fe_user->setAndSaveSessionData('dummy', TRUE);
  12. }

Hiernach wird dann auf die Startseite weitergeleitet und der User ist eingeloggt. Wichtig ist die zweite Zeile, is_permanent entscheidet, ob es ein permanentes cookie ist, oder nur so lange hält wie die Session.