Trailerbild
Certified TYPO3 Integrator
Meine aktuelle Buchempfehlung:

Links

Website meiner Frau Martina Thiele:
externer Link folgtwww.tagesmutter- luebbecke.de

Zur Webseite vom Ferienhaus auf Usedom von meinem Bruder Christian Thiele:
externer Link folgtwww.am-jungfernberg.de

Sie sind hier: Startseite » TYPO3 » TYPO3-Tutorials » Login & Logout

')">Login für Website-Besucher mit TYPO3

Wenn Sie eine Anmeldemöglichkeit für Besucher ihrer Website ermöglichen wollen, gibt es mehrere Möglichkeiten: Die Benutzung des Standard-Anmeldeformulars und der Einsatz einer Extension wie z.B. "New frondend login box". Meiner Meinung nach hat man aber mehr Möglichkeiten mit dem Standard-Elementen.

Folgende Schritte sind für eine Lösung nötig:

1. SysOrdner für die Website Besucher

Zuerst wird eine neue Seite vom Typ SysOrdner angelegt. Der Titel könnte "Website Benutzer" sein, bei dem Feld "Enthält Erweiterung" sollten Sie auch Website Benutzer auswählen.

Im TSConfig-Feld könnten sie noch folgenden Code einfügen, damit in diesem Ordner nur Benutzer und Benutzergruppen gespeichert werden können:

Sourcecode für Text-Editor optimiert zeigen.

mod.web_list {
    allowedNewTables = fe_users, fe_groups
}

2. Seiten-ID des SysOrdners im Constant-Editor eintragen

Die ID des SysOrdners muss nun noch im Constant-Editor eingetragen werden.
Dazu gehen Sie auf Ihr root-Template und rufen dort den Constant-Editor auf. In dem nun erscheinendem Kategorie-Drop-Down-Feld wählen Sie Content aus. Am Ende der sich nun öffnenden Seite finden Sie nun den Eintrag "PID of user archive". Damit Sie nun die ID eintragen können, müssen Sie zunächst den Haken setzen und dann Update anklicken, um die Eingabe zu machen. Die ID bekommen Sie heraus, indem Sie kurz mit dem Mauscursor auf dem Icon des Sysordners verweilen.

3. Login- & Loginstatus-Seite anlegen

Nun ist es an der Zeit, die Seite mit dem Loginformular zu gestalten. Wir benötigen nun 2 Seiten: eine für das Formular und parallel zu dieser eine Zielseite, wenn der Submit-Button gedrückt wurde. Die Zielseite ist dann vom Typ "Nicht im Menu", denn diese darf man nur über das Anmeldeformular erreichen. Auf dieser Zielseite wird später ausgegeben, ob der Login erfolgreich oder fehlerhaft war.

Um das Anmeldeformular auf der Loginseite hinzuzufügen wählen Sie als neues Seitenelement "Anmeldeformular". Als Zielseite geben Sie nun die Loginstatus-Seite an.

Auf der Loginstatus-Seite werden wir nun 3 Content-Elemente einfügen:

Das erste Element ist z.B. vom Typ Text. Hier wird ein Text ausgegeben, wenn man sich erfolgreich angemeldet hat. in dem Feld "Allgemeine Optionen (Fortsetzung):" können Sie im rechten Feld den Eintrag "Bei jedem Login anzeigen" auswählen.

Das zweite Element ist für den Fall, dass der Login fehlgeschlagen ist. Hier sollte im Text stehen, aus welchen Gründen der Login fehlgeschlagen sein könnte. Diesen Text verstecken wir nun, falls man eingeloggt ist, mit der Auswahl "Beim Login verstecken".

Das dritte Element ist nun noch einmal das Anmeldeformular. Auch dieses darf wieder nur angezeigt werden, wenn wir nicht eingeloggt sind. Daher auch hier der Eintrag "Beim Login verstecken" im Zugriffs-Feld. Bei diesem Anmeldeformular muss diesmal keine Zielseite definiert werden, da im undefinierten Zustand die aktive Seite wieder aufgerufen wird.

Das Login funktioniert zwar jetzt schon, aber nach dem einloggen steht im Menü immer noch Login. Man könnte nun die Loginseite mit den Zugriffsrechten so einstellen, dass diese beim Login ausgeblendet wird. Dies hätte später allerdings einen Nachteil: Ich will später mit der Funktion "typolink" einen Link für den Logout-Button erstellen, der dann wieder zurück zur Loginseite führt. Da im eingeloggten Zustand die Login-Seite noch nicht zugänglich wäre, würde typolink auch keinen Link generieren.

Also müssen Sie TypoScript benutzen:
Wenn Sie bei dem HMENU special = list gewählt haben, dann könnten Sie mit der Condition [usergroup = *] die Zeile special.value = modifizieren. Bei der Menüerzeugung mit special = directory könnten Sie mit der Eigenschaft excludeUidList arbeiten, um die Loginseite aus dem Menü auszuschließen.

Beispiel:

Die Loginseite hat in diesem Beispiel die ID 4. Die ID's 5,6,7 sind weitere Seiten in diesem Menü.

Sourcecode für Text-Editor optimiert zeigen.

lib.topmenu = HMENU
lib.topmenu {
    special = list
    special.value = Siehe Condition
    1 = TMENU
    ...
}
...
[usergroup = *]
    lib.topmenu.special.value = 5,6,7
[else]
    lib.topmenu.special.value = 4,5,6,7
[end]

4. Der Logout-Button

Jetzt wird zwar die Login-Seite nach dem Login aus dem Menü genommen, aber es fehlt jetzt die Möglichkeit, sich wieder auszuloggen. Eine Möglichkeit wäre, eine neue Seite anzulegen mit dem Seitentitel Logout und wieder dem Seitenelement Anmeldeformular. Benutzerfreundlicher wäre allerdings, dass man beim Klick auf den Logout-Button direkt ausgeloggt wird. Würde man sich das vom Seitenelement "Anmeldeformular" erzeugte Logout-Formular genauer im Quelltext ansehen, würde das hidden-Feld auffallen, bei dem "logintype" mit dem Wert "logout" versehen wird. Genau diesen Parameter müssen Sie bei Ihrem eigenen Logout-Button benutzen. Es muss nun ein Link generiert werden in der Form domain.tld/index.php. Falls Sie simulateStaticDocuments oder RealURL benutzen, dann muss dieser Link natürlich umgeschrieben werden, damit die Suchmaschinen kein "Duplicate Content" sehen.

Damit unser Logout-Link so funktioniert, muss die Funktion typolink eingesetzt werden. Da der Link nun anstatt dem Login-Menüeintrag erscheint, werden Sie das Menü als COA, also eine Gruppierung mehrerer cObjects, umschreiben müssen.

Sourcecode für Text-Editor optimiert zeigen.

lib.topmenu = COA
lib.topmenu {
    10 = TEXT
    10 {
        value = Logout
        typolink.parameter.data = TSFE:id
        typolink.additionalParams = &logintype=logout
    }
    20 = HMENU
    20 {
    special = list
    special.value = Siehe Condition
    1 = TMENU
    ...
    }
}
...
[usergroup = *]
    # Alternativ kann in diesem Fall bei aktuellen TYPO3-Versionen auch
    # lib.topmenu.20.special.value := removeFromList(4)
    # verwendet werden.
    lib.topmenu.20.special.value = 5,6,7
[else]
    lib.topmenu.10 >
    lib.topmenu.20.special.value = 4,5,6,7
[end]

Die Zeile typolink.parameter.data = TSFE:id erzeugt einen Link auf die eigene Seite, da data = TSFE:id die Seiten-ID der aktuellen Seite zurückliefert. Mit der Zeile danach wird der zusätzliche GET-Parameter angehängt.

Nun wird mit lib.topmenu.10 > unter dem [else] der Condition der Logout-Button gelöscht, wenn man nicht eingeloggt ist.

Nun kann man sich auf jeder Seite direkt ausloggen...nur auf einer Seite sieht dies sehr unschön aus: Die Loginstatus-Seite. Denn wenn der Website-Besucher sich auf dieser Seite ausloggt, dann ist es ja so, als ob eine fehlerhafte Anmeldung stattgefunden hätte und der Besucher würde nach dem Logout die Meldung "Login fehlgeschlagen" bekommen. Hier hilft ein kleines Erweiterungs-Template, das uns beim Logout auf dieser Seite nicht auf die aktuelle Seite, sondern auf die Login-Seite leitet.

Dies muss dazu in das Erweiterungs-Template auf der Loginstatus-Seite:

Sourcecode für Text-Editor optimiert zeigen.

lib.topmenu.10.typolink.parameter >
lib.topmenu.10.typolink.parameter = 4