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
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.
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);
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;
}
}