Usernamen (Emailadresse) ändern

Hallo allerseits,

wir wollen in unserem Shop die Möglichkeit anbieten, den Usernamen (=Emailadresse) zu ändern.

Bisher funktioniert das nicht, weil im entsprechenden HTML-Formular das Passwort des Users nicht auftauchte. Denn der User muss offenbar bei der Usernamen-Änderung stets das Passwort eingeben, damit die Codezeile InputValidator.php, Z. 128, Methode checkLogin() nicht davon ausgeht, dass der User ein neues PW eingegeben hat:

`$sLogin = (isset($aInvAddress[‘oxuser__oxusername’])) ? $aInvAddress[‘oxuser__oxusername’] : $sLogin;

    // check only for users with password during registration
    // if user wants to change user name - we must check if passwords are ok before changing
    if ($oUser->oxuser__oxpassword->value && $sLogin != $oUser->oxuser__oxusername->value) {
        // on this case password must be taken directly from request
        $sNewPass = (isset($aInvAddress['oxuser__oxpassword']) && $aInvAddress['oxuser__oxpassword']) ? $aInvAddress['oxuser__oxpassword'] : \OxidEsales\Eshop\Core\Registry::getConfig()->getRequestParameter('user_password');`

Der bekannte Username des Users ($oUser->oxuser__oxusername->value) ist hier ungleich dem neu eingegebenen ($sLogin), so dass das Passwort ($aInvAddress[‘oxuser__oxpassword’]) gecheckt wird. Ist dieses nicht leer und wie erwartet vorhanden, war die Validierung erfolgreich und es kann der Datensatz geschrieben werden. Problem: Im HTML-Formular stand ja das unverschlüsselte Passwort und die Daten werden dann über …

$this->assign($aInvAddress);

… (ce/User.php Z. 1155) direkt in die Datenbank geschrieben. Eigentlich müsste das Passwort aber ja noch verschlüsselt bzw. von der Speicherung ausgeschlossen werden. Warum passiert das nicht bzw. wo ist der Fehler in meinem (Un-)Verständnis?

Für jeden Hinweis dankbar,
butz79

Ich würde das so versuchen:

$oUser->load($id);
$sUserName = ‘[email protected]’;
$sPassword = $sPassword2 = $oUser->oxuser__oxpassword->value;
$oUser->changeUserData($sUserName, $sPassword, $sPassword2, $aInvAdress, $aDelAdress);