Ergebnis 1 bis 5 von 5

Thema: Update Benutzerpasswort via Hook checkCredentials

  1. #1
    Contao-Nutzer
    Registriert seit
    09.10.2014.
    Beiträge
    7

    Standard Update Benutzerpasswort via Hook checkCredentials

    Hallo liebe Gemeinde,

    heute meine erste Frage und ich hoffe, das richtige Forum erwischt zu haben.

    Ich verwende diese Erweiterung, um Frontend-Benutzer gegen LDAP zu authentifizieren.
    Die Erweiterung habe ich so angepasst, dass sie mit Contao 3.3.5 auch funktioniert.

    Die Erweiterung verwendet die Hooks "importUser" und "checkCredentials".

    Via "importUser" wird jetzt auch ein neuer User in tl_member angelegt. Das eingegebene Passwort wird, sofern die Authentifzierung gegen LDAP funktioniert, mit \Encryption::hash($strPassword) gehashed und in der Tabelle gespeichert.

    Nun zu meinem Problem:

    "checkCredentials" wird ja immer dann aufgerufen, wenn das vom User eingegebene Passwort nicht mit dem in der DB gespeicherten PW übereinstimmt.
    Nun will ich das neue Passwort (wiederum sofern es "richtig" ist, also die LDAP Authentifizierung klappt) in der Contao-Datenbank aktualisieren.

    Leider klappt ein Update des Usereintrags nicht, obwohl ich eine positive Rückmeldung für die MySQL-Query bekomme.

    In der Methode die bei checkCredentials aufgerufen wird, frage ich zunächst die ID zum User ab:
    Code:
    $userid = $this->Database->prepare("SELECT id FROM tl_member WHERE username ='$strUsername'")
                                           ->limit(1)
                                           ->execute();
    // $userid->id liefert das gewünschte Ergebnis
    Danach will ich via Update das neue Passwort setzen:
    Code:
    $result = $this->Database->prepare("UPDATE tl_member SET password=? WHERE id =?")
                                           ->execute($hashed_password, $userid->id);
    In $result steht, dass nun die Query richtig drin und auch, dass eine Zeile geändert wurde.
    Aber in der Datenbank sehe ich, dass sich nichts geändert hat.

    Was habe ich übersehen?
    Wird während der Anmeldung und dem Aufruf des Hooks irgendwie die Tabelle gelocked, oder mache ich einen offensichtlichen Fehler?

  2. #2
    Contao-Nutzer
    Registriert seit
    09.10.2014.
    Beiträge
    7

    Standard

    neueste Erkenntnis:

    Ich habe die Tabelle contao.tl_member nach test.tl_member kopiert, also in einer Datenbank.
    Schreibe ich die Änderungen in die Tabelle in der Testdatenbank, bleiben sie erhalten.
    Für mich heißt das jetzt, dass Contao die Tabelle tl_member während der Anmeldung locked oder aus irgendeinem anderen Grund meine Änderungstransaktion rückgängig gemacht wird.

  3. #3
    Contao-Nutzer
    Registriert seit
    09.10.2014.
    Beiträge
    7

    Standard

    Nicht schön, aber es funktioniert:

    Ich habe das Aktualisieren des Passworts in den Destruktor der Klasse gepackt, die über den Hook checkCredentials aufgerufen wird.

    So wird der User erstmal über den Rückgabewert der entsprechenden Methode im Frontend authentifiziert und scheinbar datenbankseitig der Eintrag oder die Tabelle freigegeben.
    Und danach wird dann erst das Passwort in der Contao-DB aktualisiert (wenn dann das entsprechende Objekt zerstört wird).

  4. #4
    Contao-Nutzer Avatar von Tastaturberuf
    Registriert seit
    14.03.2011.
    Ort
    Berlin
    Beiträge
    197
    User beschenken
    Wunschliste

    Standard

    Das Model detachen, query drüber, Model neuladen geht auch.

    https://community.contao.org/de/showthread.php?t=49345
    Tastaturberuf | Code with ♥ and Contao.

  5. #5
    Contao-Nutzer
    Registriert seit
    09.10.2014.
    Beiträge
    7

    Standard

    Danke für den Tipp.

    Muss zugeben, dass mir das gerade noch nichts sagt, aber ich habe ja Anhaltspunkte zum suchen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •