composer require digitalzombies/be-inviteExtension key:be_invite · Composer:digitalzombies/be-invite · TYPO3: 14 LTS
Einen neuen Backend-Benutzer anzulegen bedeutet normalerweise: Konto erstellen, ein Passwort ausdenken und dieses Passwort irgendwie an die Person schicken — per E-Mail, Chat oder Zettel. Das Passwort liegt damit in einem Kanal, den ihr nicht kontrolliert, und bleibt dort meistens auch.
Diese Extension ersetzt das durch eine Einladung. Die Administratorin oder der Administrator gibt eine E-Mail-Adresse ein und wählt die Benutzergruppen; die eingeladene Person erhält einen Link und wählt ihr Passwort selbst. Niemand hat je ein fremdes Passwort in der Hand.
Der Einladungs-Ablauf
1. Administrator öffnet System › Backend-Benutzer
Neben den TYPO3-eigenen Schaltflächen Redakteur anlegen / Administrator anlegen sitzt ein Button Benutzer einladen. Er wird nur für Administratoren und nur in der Benutzerliste gerendert.

2. Die Daten der eingeladenen Person eingeben
Der Dialog fragt nach einer E-Mail-Adresse, optional einem Namen und mindestens einer Backend-Benutzergruppe. Die Gruppenliste wird beim Öffnen des Dialogs vom Server geladen und zeigt damit immer die aktuell vorhandenen Gruppen.

Die E-Mail-Adresse wird zum Benutzernamen des neuen Kontos — es gibt keinen separaten Benutzernamen, den man sich ausdenken und mitteilen müsste.

3. TYPO3 verlangt eine Bestätigung
Ein Backend-Konto anzulegen ist eine privilegierte Operation, deshalb verlangt der Sudo-Modus von TYPO3 die erneute Eingabe des eigenen Passworts. Eine unbeaufsichtigte, noch eingeloggte Session kann so niemandem Backend-Zugang verschaffen.

4. Die Einladung geht raus

Das Konto existiert jetzt, ist aktiviert und trägt die gewählten Gruppen — aber es hat kein Passwort, das irgendjemand kennt, und es wurde noch nie damit eingeloggt.

5. Die eingeladene Person erhält die E-Mail
Die E-Mail nennt den Benutzernamen und enthält einen Aktivierungslink, der 48 Stunden gültig ist. Sie wird als HTML und als Text verschickt.

6. Die eingeladene Person setzt ihr eigenes Passwort
Der Link öffnet den TYPO3-eigenen Passwort-Reset — kein eigenes Formular, kein zusätzlicher Code-Pfad, und die Passwort-Richtlinie der Installation greift genauso wie überall sonst.

Nach dem Setzen des Passworts kann sich die Person mit ihrer E-Mail-Adresse und dem gerade gewählten Passwort anmelden.
Was im Hintergrund passiert
| Schritt | Was die Extension tut |
|---|---|
| Validierung | Trimmt die E-Mail-Adresse und wandelt sie in Kleinbuchstaben, weist fehlerhafte Adressen ab, ebenso Adressen mit mehr als 50 Zeichen (die Breite von be_users.username) und Anfragen ohne Gruppe |
| Dublettenprüfung | Verweigert die Einladung, wenn E-Mail oder Benutzername bereits zu einem Konto gehören — auch zu deaktivierten und zeitlich beschränkten |
| Kontoerstellung | Schreibt den Datensatz über den DataHandler von TYPO3, mit einem langen zufälligen Platzhalter-Passwort, admin = 0, aktiviert, auf Root-Ebene |
| Aktivierungslink | Erzeugt einen Token genau so, wie der TYPO3-Core Passwort-Reset-Token erzeugt, aber mit 48 Stunden Gültigkeit statt 2 Stunden, und speichert ihn gehasht |
Rendert die Fluid-Templates Invitation.html / Invitation.txt und verschickt sie über den konfigurierten TYPO3-Mailer |
Falls das Konto angelegt, die E-Mail aber nicht zugestellt werden konnte, wird das explizit gemeldet — das Konto existiert zu diesem Zeitpunkt bereits, und der richtige Weg ist dann ein normaler Passwort-Reset, keine zweite Einladung.
Sicherheitseigenschaften
- Nur für Administratoren. Beide AJAX-Endpunkte prüfen serverseitig
$GLOBALS['BE_USER']->isAdmin(). Den Button auszublenden ist nicht die Zugriffskontrolle — die Endpunkte sind es. Ohne diese Prüfung könnte allein der Gruppen-Endpunkt jeder Redaktion sämtliche Backend-Benutzergruppen offenlegen. - Sudo-Modus. Das Anlegen eines Kontos löst die Step-up-Authentifizierung von TYPO3 aus.
- Keine Passwort-Preisgabe. Das Platzhalter-Passwort ist zufällig, wird nie angezeigt, nie geloggt und nur als Hash gespeichert.
- Keine internen Fehlermeldungen nach außen. DataHandler-Meldungen, SQL-Fehler und Mailer-Konfiguration werden per PSR-3 geloggt und durch eine generische Meldung ersetzt, bevor sie im Browser landen.
- Bestehende Konten werden nie stillschweigend verändert. Eine kollidierende Einladung wird mit HTTP 409 abgewiesen, und ein Datensatz, der ein Rennen gegen einen gleichzeitigen Insert verliert, wird zurückgerollt.
Eine Konsequenz ist erwähnenswert: Der Einladungslink wird über die Core-Route
password_reset_validate validiert, und die berücksichtigt
$GLOBALS['TYPO3_CONF_VARS']['BE']['passwordReset'] nicht. Wenn der Passwort-Reset auf dieser
Installation bewusst abgeschaltet wurde, öffnet diese Extension diesen Weg für eingeladene
Personen wieder.
Voraussetzungen und Installation
TYPO3 14.0–14.99 und PHP 8.2+. Die Extension nutzt die ComponentFactory aus v14, das Attribut
#[AsEventListener] und den HashService aus v14 und ist nicht abwärtskompatibel zu TYPO3 13.
composer require digitalzombies/be-invite
Danach die Caches leeren. Es gibt keine Datenbankänderung, kein TypoScript und nichts zu konfigurieren — ein funktionierendes Mail-Setup wird allerdings vorausgesetzt.
Die E-Mail anpassen
Die Templates sind unter MAIL/templateRootPaths[1700000000] registriert. Registriert einen
eigenen Pfad mit einem höheren Schlüssel und legt dort Invitation.html / Invitation.txt ab:
$GLOBALS['TYPO3_CONF_VARS']['MAIL']['templateRootPaths'][1700000100]
= 'EXT:my_sitepackage/Resources/Private/Templates/Email/';
Verfügbare Variablen: name, email, resetLink.
Die mitgelieferten Templates sind ausschließlich auf Englisch. Zum Zeitpunkt der Einladung hat die empfangende Person noch kein Backend-Konto und damit keine Spracheinstellung, deshalb wird keine Sprache automatisch ausgewählt.
Sprache der Oberfläche
Die Backend-Oberfläche gibt es auf Englisch, Deutsch und Ungarisch. Die Labels liegen in
Resources/Private/Language/{locallang,de.locallang,hu.locallang}.xlf und werden von PHP-Code
und JavaScript-Modul gemeinsam genutzt.