Problem mit neuerer Version

  • Betroffene Version
    WoltLab Suite 5.3

    Hallo,

    ich habe das Problem das etwas bei uns was in die Dateien vom WSC eingreift nicht mehr funktioniert seit dem 5.3.0 Update.

    Bei uns ist das Forum für ein Gameserver dessen Accounts über ein eigenes PHP gestütztes UCP angelegt werden.

    Wir haben es bei uns im UCP so gemacht, dass das UCP bei erfolgreicher E-Mail Aktivierung im UCP den Account auch im Forum anlegt über das Registerformular.

    Unser Forum hat folgende Optionen in der Benutzerregistrierung:

    Im ACP unter Konfiguration -> Benutzer -> Registierung:

    Registrierung deaktivieren: Nein

    Nutzungsbedingungen aktivieren: Nein

    Aktivierungsmethode: Keine Aktivierung notwendig

    Sicherheitsüberprüfung aktivieren: Nein(Wurde ersetzt durch eine neue Funktion die wir ebenfalls deaktiviert haben)

    Dann haben wir in der Datei /lib/form/RegisterForm.class.php nach "assignVariables" gesucht und direkt hinter "public function assignVariables() {" folgenden Code eingefügt:

    Code: RegisterForm.class.php
    $regAllowed = ((isset($_REQUEST['regSecret'])&&$_REQUEST['regSecret']=='uDe4sdhwepRy') ? true : false);
    if (!$regAllowed) {
        header("Location: https://cp.blabla.tld/?page=register");
        exit();
    }

    Außerdem haben wir in der gleichen Datei "public static $minRegistrationTime = 10;" auf "public static $minRegistrationTime = 0; " geändert

    Im templates Ordner haben wir folgende Dateien ersetzt:

    Code: register.tpl
    {include file='formError'}
    <form method="post" action="">
        <input type="text" id="username" placeholder="username" name="{@$randomFieldNames[username]}" value=""><br>
        <input type="text" id="email1" placeholder="email1" name="{@$randomFieldNames[email]}" value=""><br>
        <input type="text" id="email2" placeholder="email2" name="{@$randomFieldNames[confirmEmail]}" value=""><br>
        <input type="text" id="pw1" placeholder="pw1" name="{@$randomFieldNames[password]}" value=""><br>
        <input type="text" id="pw2" placeholder="pw2" name="{@$randomFieldNames[confirmPassword]}" value=""><br>
        {@SECURITY_TOKEN_INPUT_TAG}<br>
        <input type="submit">
    </form>
    Code: accountManagement,tpl
    {include file='userMenuSidebar'}
    
    {include file='header' __disableAds=true __sidebarLeftHasMenu=true}
    
    <p class="info">Deine E-Mail Adresse und dein Passwort kannst Du im Control-Panel ändern.<br><a href="https://cp.example.com/?page=settings" target="_blank">Klicke hier um zum User-Panel zu gelangen.</a></p>
    
    {include file='footer' __disableAds=true}

    Mit https://domain.tld/index.php?register&regSecret=uDe4sdhwepRy ist das Register dann noch weiterhin erreichbar.

    Wenn im UCP der Account über den Aktivierungslink aktiviert wird werden die Accounts wie folgt angelegt:

    Ich entschuldige mich jetzt schonmal das es sehr viel Code ist. Viele würden das auch als eine unprofessionelle Art bezeichnen, aber für uns war die Art und Weise am einfachsten xD

    Ich hoffe jemand hat eine Idee woran das liegen kann.

    Wie gesagt 5.2.9 hat es noch geklappt aber 5.3.0 plötzlich nicht mehr.

  • Versuche es mal bitte wie folgt:

  • Fighter456

    Entweder hat es nicht funktioniert oder ich habs falsch aufgefasst. Der Quellcode bei uns sieht jetzt so aus:

  • Die jeweiligen + am Anfang der Zeile müssen natürlich entfernt werden. Das war lediglich als Hilfe gedacht, was hinzugekommen ist. :)

    Entschuldige. Die müssen natürlich weg dumm von mir. Was ich halt meinte ist ob ich das was wir bei uns schon abgeändert hatten auch drin lassen soll. also das hinter "public function assignVariables() {"

  • Das natürlich entfernen, bitte.

    Sieht jetzt so aus

    Klappt aber leider immernoch nicht :(

    Das Register Formular ist aber auch so ohne RegSecret erreichbar. Also das scheint irgendwie nicht gegriffen zu haben.

  • Doch, klappt auf Seiten von PHP definitiv.

    Code mit Debug-Ausgabe eingefügt:

    Adresse ohne korrektem Secret aufgerufen:

    Möchtest du den Aufruf ohne regSecret - URL-Parameter verhindern, muss das folgendermaßen aussehen:

    PHP
            if (isset($_REQUEST['regSecret'])) {
                if (StringUtil::trim($_REQUEST['regSecret']) !== 'uDe4sdhwepRy') {
                    HeaderUtil::redirect('https://ucp.playv.de/?page=register');
                    exit;
                }
            }
            else {
                HeaderUtil::redirect('https://ucp.playv.de/?page=register');
                exit;
            }
  • Das Ding ist aber, dass das UCP den Account aber auch nicht anlegen kann

  • Dann kläre mich mal auf, wie/wo die Datei reg_activate.php ins Spiel einbezogen wird. Die wird ja anscheinend nirgendwo aufgerufen und sollte doch eigentlich im action-Attribut hier stehen oder bin ich jetzt total auf dem Holzweg?

  • Dann kläre mich mal auf, wie/wo die Datei reg_activate.php ins Spiel einbezogen wird. Die wird ja anscheinend nirgendwo aufgerufen und sollte doch eigentlich im action-Attribut hier stehen oder bin ich jetzt total auf dem Holzweg?

    Ich könnte dir FTP Daten geben, damit du es dir anschauen könntest wenn du magst und wenn du die Zeit dazu frei hättest.

    Weil meine Kenntnisse in dem Bereich beschränken sich relativ auf die Grundkenntnisse

  • Können wir gerne machen, allerdings nicht mehr heute. Ob ich dazu morgen Abend Zeit finde, kann ich dir gegenwärtig auch nicht sagen.

    Also ich habs jetzt durch testen und probieren so hinbekommen das wirklich die Register Sperre mit Regsecret wieder funktioniert, aber das UCP also eine externes System außerhalb von Woltlab, das Accounts für den Gameserver anlegt auch einen ForenAccount mit den selben Werten anlegen soll.

    Ich weiß nicht, ob das die 2 Quellcodes die dabei helfen zu verstehen was das UCP macht:

    Hast du Discord oder so wo man dich kontaktieren kann?

  • Ja, hätte ich zur Not, aber was steht denn in der Variable $register nach dem POST-Request drin? Da es die HTML-Rückgabe enthält, sollte sich daraus auch das Problem (z.B. fehlende Eingabe) ableiten können.

    In welcher Datei genau?

    Edit: Ich glaib ich weiß was du meinst. in der reg_activate.php ist glaube ich das drin nachdem du gefragt hast.

    Code
                    $register = regCurl(FORUM_URL."/index.php?register&regSecret=".FORUM_REG_SECRET, $cookie, http_build_query($postData));
                            @unlink($cookie);
  • Meinst du das hier?

    Code
                            $postData = array(
                                $w_user        => $regData['username'],
                                "username"    => "",
                                "email"        => "",
                                $w_email1    => $regData['email1'],
                                $w_email2    => $regData['email1'],
                                $w_pw1        => $regData['pass1'],
                                $w_pw2        => $regData['pass1'],
                                "t"            => $w_token,
                            );
  • Das ist keine var_dump()-Ausgabe. Meinen Code aus Beitrag #16 bitte unter Zeile 2 des Codes aus Beitrag #15 platzieren und dann die Registrierung einmal durchführen. Die dann angezeigte Ausgabe einmal posten.

  • Wenn ich das mache funktioniert der Code nicht mehr.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!