Liebe Typo3-Gemeinde,
ich schreibe gerade eine Login-Extension als Alternative zur newloginbox:
* In einem Formular gibt man Benutzername und Passwort an
* Wird das Formular abgesendet, wird mit einer DB-Abfrage geprüft, ob ein User mit diesem Namen und Passwort in der fe_users existiert.
Was ich nicht zufriedenstellend schaffe: wenn ein solcher User existiert, wie kann ich diesen dann als Frontend-User einloggen? Mit welcher Funktion sage ich Typo3: Bitte diesen User einloggen?
Derzeit löse ich das Problem ziemlich "unprofessionell": ich rufe per PHP header()-Funktion eine beliebige Seite auf und übergebe dieser die nötigen Login-Parameter:
index.php?id=12&user=Benutzername&pass=PasswortVerschlüsselt&logintype =login&pid=11&challenge=AktuellerChallengeWert
Das funktioniert - vermutlich weil bei mir die Extensions newloginbox und kb_md5fepw noch installiert sind.
Offensichtlich prüft Typo3 bei jedem Aufruf einer neuen Seite, ob solche Login-Parameter per POST oder per GET übergeben wurden. Wenn ja, ob diese korrekt sind. Und wenn auch das der Fall ist, loggt Typo3 den User automatisch ein.
Was mich (u.a.) bei meiner Lösung stört: in der Adressezeile (des Browsers) der aufgerufenen Seite sind natürlich alle diese URL-Parameter sichtbar.
Weiß jemand, wie man das "richtig" machen kann? Also mit welcher Funktion ich den User von meinem PHP-Skript aus als eingeloggt deklarieren kann?
schau dir mal die datei "class.t3lib_userauth.php" in typo3/t3lib/ an...dort geschieht alles was du brauchst.
Hallo NickD, vielen Dank für Deinen Tipp. Ich habe die Klasse heute zum zweiten mal angeschaut. Ich verstehe das Login-Prozedere von Typo3 trotzdem noch nicht: welche Funktion loggt den User denn ein? Oder bedeutet "einloggen" das man eine neue UserSession erzeugt?
Habe ein wenig mit den Funktionen rumexperiment, aber leider erfolglos...
@steffenk: Tausend, tausend Dank! Genau das habe ich gesucht - funktioniert wunderbar!
Hi Steffen,
nur der Vollständigkeit halber (und weil es mich zugegebenerweise gerade beschäftigt): Wie kann ich einen User per Code ausloggen?
Danke
Bitbull
Ich mache das so:
$GLOBALS['TSFE']->fe_user->logoff();
Hi Babyschlumpf,
YO! Danke!
(Manchmal liegt das Gute ach so nah...)
Gruß
Bitbull
Moin Leute,
das script hört sich auch für meine Belange nicht schlecht an, aber mir wird nicht klar, wo ich das einzubauen habe.
Wo also gehört:
http://www.sk-typo3.de/FE-Userlogin-per-Code.191.0.html
$loginData=array(
'uname' => 'johndoe', //usernmae
'uident'=> 'mypassword', //password
'status' =>'login'
);
$GLOBALS['TSFE']->fe_user->checkPid=0; //do not use a particular pid
$info= $GLOBALS['TSFE']->fe_user->getAuthInfoArray();
$user=$GLOBALS['TSFE']->fe_user->fetchUserRecord(
$info['db_user'],$loginData['uname']);
$ok=$GLOBALS['TSFE']->fe_user->compareUident($user,$loginData);
if($ok) {
//login successfull
$GLOBALS['TSFE']->fe_user->createUserSession($user);
} else {
//login failed
}
hin? In welche Datei?
Danke
Ich habs jetzte geschafft.
Allerdings ohne Extension:
Lösungsweg:
Man integriere in das setup des Templates (nicht innerhalb von "page")
includeLibs.DEINE_LIB = fileadmin/libs/user_DEINE_LIB.php
Nun bindet man die Klassen und die zu nutzende Funktion ein
page.5 = USER_INT
page.5.userFunc = user_DEINE_CLASS->user_DEINE_FUNKTION
Wichtig dabei ist anscheinend:
1. Die Klasse und die Funktionen müssen mir "user_" anfangen
2. USER_INT wird nicht gecached und wird somit immer wieder von neuem aufegrufen
Trotzdem meine Frage an die Spezies.
Ist das so der korrekte Weg?
wenn du keine Extension willst, dann ja
georg