Qualifizierte Weiterleitung nach Frontend-Login

Gesperrt
bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von bodil » Fr 7. Okt 2011, 04:24

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

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von bodil » Mo 10. Okt 2011, 01:06

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. :roll:
Und nützlich ist das schon. Denkbar wäre z.B. auch, die Referrer-IDs in die Session zu schreiben.

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von Oldperl » Mo 10. Okt 2011, 07:23

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von bodil » Di 11. Okt 2011, 07:15

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. :oops:
Schönen Dank und Gruß
Bodil

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von Oldperl » Di 11. Okt 2011, 14:32

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von Spider IT » Di 11. Okt 2011, 16:00

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é

bodil
Beiträge: 340
Registriert: Fr 7. Okt 2011, 04:10
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von bodil » Mi 12. Okt 2011, 01:25

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!

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von Oldperl » Mi 12. Okt 2011, 06:25

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

apicalart
Beiträge: 161
Registriert: Fr 18. Mär 2005, 13:09
Wohnort: Linnich ( NRW )
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von apicalart » Mi 20. Aug 2014, 12:18

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.
Dat gijjt et doch nit wirklich, odder !

Grüsse aus dem Rheinland
http://www.eukoba.de

Oldperl
Beiträge: 4254
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Qualifizierte Weiterleitung nach Frontend-Login

Beitrag von Oldperl » Do 21. Aug 2014, 19:50

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Gesperrt