felogin redirect

  • Hallo Leute!


    Ich verwende "felogin" in Verbindung mit "seminars".
    Wenn jemand nicht angemeldet ist und ein Seminar buchen will, taucht statt dem Buchungsvorgang das Login Feld auf; soweit so gut.


    Die URL enthält eine redirect_url um noch erfolgreichem Login den Buchungsvorgang fortzusetzen. Wenn man sich einloggt, kommt jedoch nur die nachricht, dass man sich erfolgreich angemeldet habe. Die redirect_url ist aus der Adresszeile ist verschwunden und man muss das Seminar von neuem auswählen um es zu buchen.


    Wie stelle ich die Extension ein, sodass der redirect im URI berücksichtigt wird?


    Danke & Grüße,
    Fred

  • Hm, das habe ich schon versucht (auch mit gelöschtem Cache)...


    Leider heißt es dann nur: Anmeldung erfolgreich; Sie sind nun angemeldet als '[username]'.
    Der redirect_url Parameter ist dann aus der URL verschwunden.


    Gruß,
    Fred

  • In der URL steht:

    Code
    1. http://www.domain.de/cms/index.php?id=11&redirect_url=http%3A%2F%2Fwww.domain.de%2Fcms%2Findex.php%3Fid%3D31%26tx_seminars_pi1%255Bseminar%255D%3D1%26tx_seminars_pi1%255Baction%255D%3Dregister


    und nach der Anmeldung bin ich auf der Login/Logout Seite.


    Gruß,
    Fred

  • Hm, ich habe in den FlexForms bei "Redirect Options" lediglich "defined by GET/POST-Vars" ausgewählt; bei "Allgemein" "PW vergessen", "eingeloggt bleiben" und Ausgangspunkt ausgewählt.


    Sonst habe ich die Extension nicht konfiguriert.


    Hiddenfeld redirect_url bleibt leer...


    Fred

    Einmal editiert, zuletzt von freddymc ()

  • Ich antworte mir mal selbst.


    Anscheinend gibt's da einen Bug oder bei der "belabelung" der Flexforms hat sich jemand vertan ;) :


    Wenn ich "Disable redirect" anhake, funktioniert der redirect.


    Danke,
    Fred

  • Hallo zusammen,


    stehe gerade vor dem gleichen Problem. Meines Erachtens liegt der Knackpunkt im PHP-Code. Da ist zu lesen:


    Code
    1. protected function processRedirect() {
    2. ....
    3. if ($GLOBALS['TSFE']->loginUser && $this->logintype === 'login') {
    4. // logintype is needed because the login-page wouldn't be accessible anymore after a login (would always redirect)



    Das heißt, dass die Redirect-Angabe aus dem GET-Parameter nicht verarbeitet wird, wenn der logintype nicht gesetzt ist. Das ist aber beim ersten Aufruf der Seite über einen Link der Form


    .....&redirect_url=index.php%3Fid%3D24


    der Fall. Nehme ich die if-Abfrage raus, funktioniert das Ganze wie gewünscht.


    Als redirect_url muss ein korrekter Link stehen, nicht nur die ID.


    Liege ich da falsch? Funktionieren tut's.


    Grüße aus Weißwurst-City


    archie_de

  • Steffen,


    danke für die rasche Antwort.


    Bei genauer Betrachtung muss ich Dir leider Recht geben, ich lag falsch.


    Trotzdem liegt m.E. der Fehler in der processRedirect.


    Bin ich noch nicht angemeldet, tut die Funktion auf den ersten Blick nichts.


    Aber sie gibt auf jeden Fall einen neuen Wert für redirect_url zurück, der in diesem Fall aber leer ist. Und damit wird der ursprünglich (in Zeile 87) korrekt aus GET gesetzte Wert überschrieben.


    Ich habe in der processRedirect jetzt $redirect_url vorbelegt.
    Wird also in der processRedirect ein neuer Wert erzeugt, ist alles wie vorher, wird nichts getan, bleibt der alte Wert erhalten.



    Code
    1. protected function processRedirect() {
    2. $redirect_url = $this->redirectUrl;
    3. if ($this->conf['redirectMode']) {
    4. foreach (t3lib_div::trimExplode(',', $this->conf['redirectMode'],1) as $redirMethod) {


    Das erklärt auch, warum bei freddymc das Ganze funktioniert, wenn er redirects disabled. In dem Fall wird processRedirect nicht gerufen, der GET-Wert bleibt erhalten. Dafür klappt natürlich kein anderer Redirect mehr.


    Viele Grüße


    archie_de

  • Ich denke ich jab den Fehler gefunden.


    hier die Veränderung ab Zeile 411, wär schön wenn Du (oder jemand anders) das testen könnte


  • Stimmt noch nicht ganz.


    Der Teil wird nicht angesprungen, weil in 403 der Fall, dass der Logintype nicht gesetzt ist, bereits abgefangen wird.


    } elseif ($this->logintype === 'logout' || !$this->logintype)

  • ich denke das da ein Übertragungsfehler vorliegt. Es war auch noch nicht abgefangen wenn ein login-Fehler auftaucht.


    Im logout soll es nicht angesprungen werden, daher habe ich das ||!$this->logintype entfernt.


    Anbei die komplette pi1, das macht es leichter

  • Das scheint zu passen. Ich werde morgen erst dazu kommen, genauer zu testen, aber auf den ersten Blick stimmt's.


    Danke für die rasche Reaktion



    archie_de