Zum Inhalt springen

FE-Login ohne fe_user?

Erstellt am 24. Juli 2013 · 3 Antworten · letzte Antwort am 8. August 2013

Tags: Frage

schmidtpublic ·

Hallo, auf meiner Seite sollen sich Besucher einloggen können um - wie man das so kennt - bestimmte Dinge tun zu dürfen.

Nun will der Kunde aber keine parallelen Daten, sondern den Login über einen ssl/Rest-Zugriff von einem anderen System.

Bevor ich dafür nun alle von der fe_user-Verwaltung ermöglichten Dinge einen eigenen Workaround baue, wäre es doch sinnvoller, meinem 'selbstverwalteten' Besucher irgendwie eine freigeschaltete User-Group zu verpassen.

Da hakt's bei mir allerdings.

Jemand eine Idee?

Viele Grüße vom Rhein

Stefan

mischa ·

Ich habe das mal bei einem Kunden so lösen müssen, dass wir einen einzigen fe_user angelegt haben, der einen kryptischen benutzernamen und ein kryptisches Passwort hat.
Dann haben wir über ein Plugin den Login im Hintergrund simuliert.

Nachteil: jeder eingeloggte Besucher ist mit dem selben fe_user in TYPO3. Wenn es aber keine Interaktionen auf den fe_user gibt, sondern nur gesperrte Seiten / Inhalte sichtbar sein sollen, dann ist das machbar.

einpraegsam.​net ·

Wie Mischa schreibt, ist es möglich über PHP einen FE-Login zu machen, sofern ein entsprechender FE-User existiert.

Beispiel aus der Extension femanager:

$GLOBALS['TSFE']->fe_user->checkPid = '';
$info = $GLOBALS['TSFE']->fe_user->getAuthInfoArray();
$user = $GLOBALS['TSFE']->fe_user->fetchUserRecord($info['db_user'], $username);
$GLOBALS['TSFE']->fe_user->createUserSession($user);
schmidtpublic ·

Ich habe inzwischen den wohl gängigeren Weg eingeschlagen und mit einer zusätzlichen Extension einen Service erstellt, der die gegebene Authentifizierung überschreibt.

So kann ich alle Vorteile der normalen Login-Formulare verwenden - es wird dann aber direkt auf die Schnittstelle zugegriffen statt die Daten mit fe_user abzugleichen.
Das heißt Aussehen und Feeeling des Logins bleiben wie gewohnt.

class tx_meinservice_sv1 extends \TYPO3\CMS\Sv\AbstractAuthenticationService {
   public function getUser() { ... Daten mit username für Login auf fernem Server checken ...}
   public function authUser() {
        $auth = 100;
        if ($this->login['userident'] && $this->login['username'] && $user != false) {
            $auth = $this->compareUident($user, $this->login);
            return $auth;
        }
        return 100;
   }
}