Zum Inhalt springen

felogin - redirect

Erstellt am 12. Februar 2011 · 5 Antworten · letzte Antwort am 15. Februar 2011

Tags: Weiterleitungen & 404, felogin, Frage

ursbraem ·

Hallo

Ich habe den Ort für Themen rund um felogin nicht gefunden, darum schreibe ich hier.

Meine sehr einfache Frage: wie ist das korrekte Vorgehen, um nicht angemeldete Benutzer auf die Seite mit dem Login-Formular weiterzuleiten?

Und das ziemlich umständliche Drumrum:

Ich habe es jetzt einfach über das "Page not found handling" gelöst - wenn die Seite gesperrt ist, wird der Browser halt zu der nächsten darüberliegenden zugänglichen Seite weitergeleitet - und das ist eben die mit dem Login-Formular.

Aber: wenn man sich dann einloggt, soll man ja zu der Seite weitergeleitet werden, die man eigentlich wollte. Dafür (?) gibt es ja auch die Option "Weiterleitung: definiert durch Referrer". Das greift bei mir aber nicht, da es keinen Referrer gibt, der uns auf die Login-Seite weitergeleitet hat, sondern Typo3 hat intern einfach eine andere Seite ausgeliefert.

Ich konnte das lösen, indem ich in class.tx_felogin_pi1.php in

// check for referer redirect method. if present, save referer in form field
if (t3lib_div::inList($this->conf['redirectMode'], 'referer') || t3lib_div::inList($this->conf['redirectMode'], 'refererDomains')) {
$referer = $this->referer ? $this->referer : t3lib_div::getIndpEnv('HTTP_REFERER');
if ($referer) {
	$extraHiddenAr[] = '<input type="hidden" name="referer" value="' . htmlspecialchars($referer) . '" />';
  }
}

folgende Änderung gemacht habe:

$referer = $this->referer ? $this->referer : 'http://'.t3lib_div::getIndpEnv('HTTP_HOST').t3lib_div::getIndpEnv('REQUEST_URI');

... aber ich will ja nicht an der Sysext rumbohren! Darum: wie erreiche ich es, dass die ursprünglich beabsichtigte, aber ohne Login unzugängliche Adresse auf der Seite mit dem Loginform als Referrer zur Verfügung steht?

1000 Dank
Urs

ursbraem ·

Hallo Maty

4.5.

Die beiden config-Parameter sind/waren schon gesetzt.

Ich frage nochmal direkt: Wie richtest du denn das jeweils ein, wenn du willst, dass ein Deeplink (Beispiel: http://domain.ch/geschuetzterbereich/verein/arbeitsgruppe1/) auf die Loginmaske führt? (Jetzt mal ohne den Referrer-Redirect zu beachten).

Die "abgewiesenen" Besucher werden in meiner Einrichtung nicht redirected: da in localconf [FE][pageNotFound_handling] = false gesetzt ist, wird einfach die nächstgelegene Seite angezeigt.

Darum: Wie konfiguriert man das richtig, damit es (nur für die Seiten im geschützten Bereich) zu einem Redirect und danach auch zu einem Referrer kommt?

Gruss
Urs

lisardo ·

Hallo Urs,

das ganze ist ein leidiges und letztlich ungelöstes Problem. Ich wundere mich auch immer wieder, warum diese Weiterleitung anscheinend selten gebraucht wird; m. E. müsste das in praktisch jeder größeren Installation benötigt werden. Ich vermute, dass die Agenturen letztlich felogin ggf. einfach patchen und die gepatchte Version dann lokal installieren. Nun ja.

Zunächst mal zu dem hier:

config.typolinkLinkAccessRestrictedPages = 1
config.typolinkLinkAccessRestrictedPages_addParams = &referer=###RETURN_URL###

das kommt immer, wenn man nach einem derartigen Redirect fragt, ist aber in dem Zusammenhang nicht relevant. Damit werden die typolinks konfiguriert, also die Links, die innerhalb von TYPO3 auf zugangsbeschränkte Seiten gesetzt werden. Uns gehts aber um externe Linkquellen, um sog. Deep-Links.

Die einzige Lösung die ich kenne ist, im Install-Tool eine Weitereleitung einrichten:

[FE][pageNotFound_handling] = index.php?id=xyz

Damit findet ein Redirect statt, man hat einen Referrer, und die Referrer-Weiterleitung in der felogin funktioniert ... Ich nehme als pageNotFound nicht die normale Login-Seite, sondern eine andere, damit ich darauf neben dem Login noch Hinweise bringen kann für "Seite nicht gefunden" etc. Ausserdem kann ich dann die Referrer-Weiterleitung von felogin trennen von den normalen, user- oder gruppenbezogenen Weiterleitungen. die in dem Fall ja nicht benötigt werden.

Man kann das noch weiter ausbauen: Anstatt index.php?id=xyz aufzurufen, könnte man auch eine PHP-Datei zwischenschalten, die in TYPO3 die gewünschte Seite abfragt, und dann auf eine Login-Seite weiterleitet, wenn die Seite existiert und zugangsbeschränkt ist, dagegen auf eine 404-Fehlerseite, wenn die Seite nicht existiert. Aber im Zusammenhang mit RealUrl war mir das bisher zu mühsam.

Das Ganze ist wohl kein Problem von felogin sondern ein Problem des Core. felogin ist ja letztlich gar nicht involviert, wenn ein Link auf eine zugangsbeschränkte Seite führt. Ideal wäre es, wenn der Core eine Möglichkeit hätte, mehrere pageNotFound einzurichten, und wenn möglich nicht über das Install-Tool sondern über Typoscript, das wäre die sinnvollste Lösung.

Wobei mir gerade einfällt, dass es evtl. sogar eine möglichkeit über RealURL geben könnte. Muss ich mal recherchieren. Wenn mir noch was dazu einfällt, melde ich mich nochmals.

Gruß
Peter, TYPO3 @ lisardo (Augsburg)

ursbraem ·

Hallo Peter

vielen Dank für deine Antwort! Ist ja interessant! Der Nebel lichtet sich langsam.

Ich denke immer zuerst, es liegt an mir, und dann ist es doch ein Bug und/oder hat was mit RealURL zu tun ..... "It's not a missing feature - it's just a bug!"

Ich habe im Bugtracker nämlich nun auch noch einen Eintrag dazu gefunden:
http://bugs.typo3.org/view.php?id=16781

>> Ich vermute, dass die Agenturen letztlich felogin ggf. einfach patchen und die gepatchte Version dann lokal installieren

Ich frage mich, ob man felogin nicht offiziell um eine Option mehr "redirect to URI" erweitern könnte? Würde das nicht Sinn machen?

Eine Rückfrage zum Verständnis:

[FE][pageNotFound_handling] = index.php?id=xyz

Mit xyz die Seite meinst du die Seite mit dem Login-Formular, oder? Und da baust du letztlich eine erweiterte 404-Seite, die neben der 404-Meldung auch noch ein Loginform enthält, richtig?

Das Tweaken mit einer PHP-Zwischenfunktion (die also die Position im Seitenbaum abfrägt und je nach dem triagiert) wär mir jetzt auch etwas zu mühsam.

Viele Grüsse!
Urs

skydivematy ·

Hallo Ursbream,

hast Du das schon mal versucht.

#page ID=50 is restricted
[PIDinRootline = 50]
page.headerData.10666 = COA_INT
page.headerData.10666.10 = TEXT
page.headerData.10666.10.value = <meta http-equiv="refresh", "10; content="0; URL=/index.php?id=39&referer=
#index.php?id=39 -> = loginpage
page.headerData.10666.20 = TEXT
page.headerData.10666.20.insertData = 1
page.headerData.10666.20.data = getIndpEnv:TYPO3_REQUEST_URL
page.headerData.10666.30 = TEXT
page.headerData.10666.30.value = " />
[global]

#remove redirect, if user logged in
[usergroup = *] && [PIDinRootline = 50]
page.headerData.10666 >
[global]

Info von hier:
http://blog.team-noir.net/2010/11/how-to-redirect-restricted-typo3-pages-to-loginform-and-back/

und von hier:
http://sanderrr.com/?p=67

oder hast Du schon eine Elegantere Lösung gefunden?

gruss maty