Seite 1 von 1
Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Fr 7. Okt 2011, 04:24
von bodil
Wer eine Contenido-Frontend-Seite über eine geschützte Kategorie betreten will (z.B. weil er die entsprechende URL zur geschützten Kategorie in seinen Bookmarks hat) wird idealerweise auf die Loginseite umgeleitet und kann sich dort anmelden. Wo er anschließend landet, kann man in den Mandanteneinstellungen einstellen. Da es auf meiner Seite aber verschiedene geschützte Bereiche gibt, würde ich die User nach einem Login gerne auf die Seite weiterleiten, deren URL sie ursprünglich angegeben hatten. Kennt jemand hierfür einen praktikablen Weg mit Bord-Mitteln? Ich würde gerne darauf verzichten, die front_content.php editieren ...
Vielen Dank schon jetzt!
Bodil
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Mo 10. Okt 2011, 01:06
von bodil
Ohne zu editieren, scheints nicht zu gehen. Falls mal jemand ein ähnliches Problem hat: In der cms/front_crcloginform.inc.php wird von Zeile 53 bis 65 die URL zum Weiterleiten auf die Loginseite zusammengeschraubt. In Zeile 66 habe ich
Code: Alles auswählen
$sErrorUrl .= "&refIdcat=" . $idcat . "&refIdart=" . $idart;
ergänzt.
Im Contenido-Standardmodul Login_Form ersetze ich die Zeilen
Code: Alles auswählen
$sTargetIdcat = getEffectiveSetting('login', 'idcat', '1');
$sTargetIdart = getEffectiveSetting('login', 'idart', '1');
durch
Code: Alles auswählen
if (isset($_GET['refIdcat']) && isset($_GET['refIdart'])) {
$sTargetIdcat = (int) $_GET['refIdcat'];
$sTargetIdart = (int) $_GET['refIdart'];
} else {
$sTargetIdcat = getEffectiveSetting('login', 'idcat', 1);
$sTargetIdart = getEffectiveSetting('login', 'idart', '1');
}
(Die Standardwerte in der Funktion getEffectiveSetting sind jeweils anzupassen.)
Das ist noch nicht getestet (ich komme gerade nicht auf den Server

) sollte aber klappen.
Kann man sowas nicht generell in Contenido einbauen? Dann müsste ich das nicht nach jedem Update nachrüsten.
Und nützlich ist das schon. Denkbar wäre z.B. auch, die Referrer-IDs in die Session zu schreiben.
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Mo 10. Okt 2011, 07:23
von Oldperl
Hallo Bodil,
zuerst einmal willkommen im Contenido Forum.
bodil hat geschrieben:Kennt jemand hierfür einen praktikablen Weg mit Bord-Mitteln? Ich würde gerne darauf verzichten, die front_content.php editieren ...
Musst du auch nicht, Contenido kann das schon. Sind die Mandanteneinstellungen für ein Login-Redirect
nicht gesetzt und wird per POST oder GET die Variable "return" gesetzt (z.B. auf true/1) so wird das Login auf die aufrufende URL redirected.
Den Code dazu findet man in der Datei
cms/front_crcloginform.inc.php ab Zeile 74.
Code: Alles auswählen
if (isset($_GET['return']) || isset($_POST['return'])){
$aLocator = array('lang=' . (int) $lang);
if ($idcat > 0) {
$aLocator[] = 'idcat=' . intval($idcat);
}
if ($idart > 0) {
$aLocator[] = 'idart=' . intval($idart);
}
if (isset($_POST['username']) || isset($_GET['username'])){
$aLocator[] = 'wrongpass=1';
}
$sErrorUrl = $sUrl . '?' . implode('&', $aLocator);
$aUrl = $oUrl->parse($sess->url($sErrorUrl));
$sErrorUrl = $oUrl->buildRedirect($aUrl['params']);
header ('Location: ' . $sErrorUrl);
exit();
}
Es reicht also aus im Anmeldeformular ein Hidden-Field mit return=true einzubauen und die Mandanteneinstellungen zu entfernen.
Gruß aus Franken
Ortwin
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Di 11. Okt 2011, 07:15
von bodil
Hallo Ortwin,
vielen Dank für deine Antwort!
Was mich wundert: Selbst ohne Mandanteneinstellung baut das Login-Formular ja aus den Standardwerten in der Funktion getEffectiveSetting('login', 'idcat', '1'); eine gültige URL zusammen. Insofern verstehe ich nicht, was das Weglassen der Mandanteneinstellungen nützt.
Das hidden-Field habe ich im login-form.html eingetragen, der gewünschte Effekt blieb aber aus, ich bin immer wieder auf der Startseite gelandet.
Auch wenn ich in der URL nach dem front_content.php in der Form-Action alles wegschmeiße, habe ich keinen Erfolg, dann lande ich ebenfalls auf der Startseite.
Wenn ich der Form-Action einen leeren String übergebe, lande ich auf der Login-Seite mit dem Hinweis, ich sei angemeldet. Aber das war ja nicht der Plan ...
Da die Zeit etwas drängt, setze ich das ganze mal nach dem von mir dargestellten Konzept um, an der von dir beschriebene Möglichkeit bin ich aber nach wie vor interessiert. Ich glaub nur, ich hab sie noch nicht verstanden.

Schönen Dank und Gruß
Bodil
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Di 11. Okt 2011, 14:32
von Oldperl
Hallo Bodil,
es geht schon, man muss halt nur ein bisserl Basteln.
Im Modul Login_Form
Code: Alles auswählen
$sTargetIdcat = getEffectiveSetting('login', 'idcat', '1');
$sTargetIdart = getEffectiveSetting('login', 'idart', '1');
//$sFormAction = 'front_content.php?idcat='.$sTargetIdcat.'&idart='.$sTargetIdart;
$sFormAction = 'front_content.php?idcat='.$idcat.'&idart='.$idart;;
Im Template login_form.html das hidden-field ergänzen
Code: Alles auswählen
<form action="{form_action}" method="post">
<input type="hidden" name="return" value="true" />
<label for="username">{label_name}</label> <input type="text" id="username" name="username" />
Und in den Mandanteneinstellungen die das Login betreffenden Einträge löschen. Hat man nun die Loginform auf allen Seiten so bleibt man auf der Seite auf der man sich einloggt.
Was noch fehlt ist dann eine Auswertung des GET-Parameters 'wrongpass' der bei fehlerhaftem Login auf 1 gesetzt wird. Ansonsten bekommt man nämlich keinerlei Meldung bei missglücktem Login.
Gruß aus Franken
Ortwin
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Di 11. Okt 2011, 16:00
von Spider IT
Hallo Ortwin,
Oldperl hat geschrieben:Code: Alles auswählen
$sTargetIdcat = getEffectiveSetting('login', 'idcat', '1');
$sTargetIdart = getEffectiveSetting('login', 'idart', '1');
//$sFormAction = 'front_content.php?idcat='.$sTargetIdcat.'&idart='.$sTargetIdart;
$sFormAction = 'front_content.php?idcat='.$idcat.'&idart='.$idart;;
Wenn du die Variablen, die ihren Wert über getEffectiveSetting erhalten, aus dem Link rausnimmst, dann brauchen auch die Mandanteneinstellungen nicht gelöscht werden.
Außerdem könnte man diese beiden Zeilen auch auskommentieren/löschen, die haben so eh keinen Nutzen mehr.
Gruß
René
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Mi 12. Okt 2011, 01:25
von bodil
Der beschriebene Mechanismus funktioniert bei mir nicht. Ich lande nach erfolgreichem Login wieder auf der Login-Seite, allerding eben angemeldet, ohne Formular, dafür mit dem Hinweis, ich sei angemeldet und mit Logout-Option. Und genau da wollte ich ja nicht hin. Aber ich werde da mal auf Spurensuche gehen! Jetzt weiß ich ja, wonach ich suchen muss! Vielen Dank!
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Mi 12. Okt 2011, 06:25
von Oldperl
Spider IT hat geschrieben:Oldperl hat geschrieben:Code: Alles auswählen
$sTargetIdcat = getEffectiveSetting('login', 'idcat', '1');
$sTargetIdart = getEffectiveSetting('login', 'idart', '1');
//$sFormAction = 'front_content.php?idcat='.$sTargetIdcat.'&idart='.$sTargetIdart;
$sFormAction = 'front_content.php?idcat='.$idcat.'&idart='.$idart;;
Wenn du die Variablen, die ihren Wert über getEffectiveSetting erhalten, aus dem Link rausnimmst, dann brauchen auch die Mandanteneinstellungen nicht gelöscht werden.
Das ist so nicht korrekt. Diese werden noch an anderer Stelle abgefragt und verarbeitet. Einfach mal in einem Demomandanten nur das Modul ändern und dann selbst probieren.
Gruß aus Franken
Ortwin
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Mi 20. Aug 2014, 12:18
von apicalart
Hallo Ortwin,
das funktioniert alles wie beschrieben
Wie muss das aussehen?
Was noch fehlt ist dann eine Auswertung des GET-Parameters 'wrongpass' der bei fehlerhaftem Login auf 1 gesetzt wird. Ansonsten bekommt man nämlich keinerlei Meldung bei missglücktem Login.
Re: Qualifizierte Weiterleitung nach Frontend-Login
Verfasst: Do 21. Aug 2014, 19:50
von Oldperl
apicalart hat geschrieben:Wie muss das aussehen?
- GET-Var prüfen ob vorhanden
- GET-Var prüfen auf Inhalt (hier: "1")
- Falls GET-Var vorhanden und korrekt, Fehlermeldung ausgeben (oder was immer man im Fehlerfall machen will).
- Ansonsten eben nicht

Gruß aus Franken
Ortwin