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


May 13, 2015 at 08:47
Typo3

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:
public function loginUser($user) {
   $userArray = array('uid' => $user->getUid());
   //1 for a permanent cookie, 0 for session cookie
   $GLOBALS['TSFE']->fe_user->is_permanent = $user->getRememberMe();
   $GLOBALS['TSFE']->fe_user->checkPid = 0;
   $GLOBALS['TSFE']->fe_user->createUserSession($userArray);
   $GLOBALS['TSFE']->fe_user->user = $GLOBALS['TSFE']->fe_user->fetchUserSession();
   $GLOBALS['TSFE']->fe_user->fetchGroupData();
   $GLOBALS['TSFE']->loginUser = true;
   //set a dummy cookie
   $GLOBALS['TSFE']->fe_user->setAndSaveSessionData('dummy', TRUE);
}
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. On a typo3 page, the frontend-login was supposed to not only work via form but also via social-media (facebook and google plus). Thats why the users had to be manually logged in in the extbase controller. This turned out to be really difficult, it seems that since the newer typo3 versions, the session cookie is no longer set automatically. This means that after a page reload or a redirect to another page, the user is no longer logged in. This happened with typo3 version 6.2.12 and doesn't seem to be a new problem as I found numerous bug reports. Setting a dummy cookie seems to resolve the problem and the is_permanent flag determines whether said cookie is permanent or dies with the session. So here is my function loginUser, which logs in a user after a successful authentication (checking for username/password happens earlier):
public function loginUser($user) {
   $userArray = array('uid' => $user->getUid());
   //1 for a permanent cookie, 0 for session cookie
   $GLOBALS['TSFE']->fe_user->is_permanent = $user->getRememberMe();
   $GLOBALS['TSFE']->fe_user->checkPid = 0;
   $GLOBALS['TSFE']->fe_user->createUserSession($userArray);
   $GLOBALS['TSFE']->fe_user->user = $GLOBALS['TSFE']->fe_user->fetchUserSession();
   $GLOBALS['TSFE']->fe_user->fetchGroupData();
   $GLOBALS['TSFE']->loginUser = true;
   //set a dummy cookie
   $GLOBALS['TSFE']->fe_user->setAndSaveSessionData('dummy', TRUE);
}
After this, the user is redirected to the start page and is not logged in.

Tags: cookie extbase felogin Typo3


Hinterlasse einen Kommentar: