CSV Import Kunden - Passwort?

gibt es keine Möglichkeit, Kunden inkl. Passwort über CSV zu importieren?

offenbar nicht…

wie bekomm ich sie dann rein? Kann ich manuelle SQL Inserts dafür ausführen? Wie mach ich das mit dem Passwort? Ist das bei Shopware 6 MD5?

Das würde ich auch gerne wissen! Jemand eine Antwort für @FloC3‍ und mich!?

MD5 würde man natürlich heute nicht mehr benutzen, dass ist ja schon seit Jahren unsicher. Bei Passwörtern wird folgende Funktion von PHP genutzt, die entscheidet dynamisch, welcher Algorithmus genutzt wird: https://www.php.net/manual/de/function.password-hash.php

Ein Import per CSV ist nicht möglich, wenn müsste man diese manuell ins System übernehmen. Shopware bietet hier eine Spalte “Legacy_password” in der user-Tabelle die für nicht-sichere Passwörter gedacht ist, dort muss man dann auch einen Encoder übergeben. Beim nächsten Login des Kunden wir das Passwort dann in den neuen Algorithmus überführt. Wenn ein Encoder genutzt wird, den Shopware nicht kennt, muss man natürlich einen neuen im System verfügbar machen.

Hi [@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski “Moritz Naczenski”)‍,

was würde man in der Encoder-Spalte dann für das Legacy-Passwort angeben? Einfach string “md5” ?

1 „Gefällt mir“

Hier wird das ja auch in unserem Migrationstool gemacht: https://github.com/shopware/SwagMigrationAssistant/blob/21906ccd9173b0ceb90ab7aaa6b6ce08ba799e35/Profile/Shopware/Converter/CustomerConverter.php#L308

Da ist legacyEncoder soweit ich sehe Md5 (erster Buchstabe uppercase)

1 „Gefällt mir“

Hallo!

Ich möchte Kundendaten aus Shopware 4.3.4 nach Shopware 6.3.1 übernehmen.

In Shopware 4 werden die Passwörter entweder als „md5“ oder „bcrypt“ gespeichert. 

Zum Testen habe ich ein Passwort mit md5 verschlüsselt, in das Feld „legacy_password“ das verschlüsselte Passwort eingetragen und in „legacy_encoder“ den Wert „Md5“.

Nach erfolgreichem Import des Test-Datensatzes konnte ich mich als dieser Testkunde einloggen. Vorher hatte ich „md5“ und „MD5“ probiert, das schluf fehl.

Das System hat wie erwartet die beiden legacy-Felder gelöscht und unter „password“ ein neues Passwort generiert.

Ich hatte mich ausgeloggt und wieder eingeloggt, erfolgreich.

Welchen Wert muss ich nun in das Feld  „legacy_encoder“ eintragen, um diese Funktion auch für die „bcrypt“ - Kunden bereitzustellen?

Vielen Dank!

Hi, 

das Problem hatte ich gerade auch… :wink: Bei Passwörtern mit dem Encoder „bcrypt“ kannst du sie direkt in den Wert für „password“ eintragen. „legacy_encoder“ und „legacy_password“ sind an dieser Stelle nicht notwendig. 

Hallo,

wir bereiten die Migration von Kundendaten aus einem Woocommerce-Shop zu Shopware 6.4 vor.
Das Decodieren und Codieren der Passwörter auf SW6 beim Import ist fehleranfällig.

Daher favorisieren wir, die Kunden entweder beim Login oder per Serienmail zur Vergabe eines neuen Passworts aufzufordern. Können wir hierfür z.B. auf die Funktion „Passwort reset“ zugreifen? Allen Kunden diese Mail zusenden und zum Rücksetzen des Passworts auffordern?

Oder habt Ihr Ansätze für eine andere Lösung?

Gruß Gabi

Hi Gabi,

wir sind von Gambio migriert - anstatt Mails zu verschicken, gab es für Kunden beim Besuch der Website einen Block „~ Herzlich willkommen beim Neuen Shop! Technisch erforderlich: neues Passwort anfordern“. Es klappte

Bye

Michael

1 „Gefällt mir“

Hallo Michael,

danke für die Idee. Das werden wir auch so ausführen und einen Block anzeigen.

Viele Grüße
Gabi

Passwörter die mit bcrypt codiert sind können direkt als „password“ in die CVS eingetragen werden. Da muss nichts decodiert oder codiert werden. Funktioniert bei uns problemlos ohne Fehler.

Servus @Moritz_Naczenski,

in welchem Format müssen MD5 und Salz im Feld legacy_passwort stehen?

Ungesalzen klappt der Login mit dem Passwort Joshua
legacy_password: 85b103482a20682da703aa388933a6d8
legacy_encoder: Md5

Ist das Passwort gesalzen (s0mRIdlKvI) will es aber nicht funktionieren.
legacy_password: 9cb7111c33a857d7f951dd1fa2760db4:s0mRIdlKvI
legacy_encoder: Md5

Mit Blick in die Md5.php hätte ich vermutet, dass MD5 und Salt durch einen Doppelpunkt getrennt im Feld stehen müssen.

Was mache ich hier falsch?

Gruß
Gary

Hej,

der Import von md5 codierten Passwörter funktionierte bei uns auch ohne Probleme.

Allerdings liegen in den Altdaten auch neuere Passwörter in bcrypt vor. Und zwar mit dem $2a$ Prefix und Faktor 8. Obwohl diese im Feld password liegen, werden sie beim Import noch einmal (um)codiert (mit $2y$10) und führen somit dazu, dass man sich mit den Daten nicht mehr anmelden kann.

Leider habe ich noch nicht den Punkt zurückverfolgen können, an welchem dies passiert. Legt man die Hashes direkt in die DB, ist ein Anmelden korrekt möglich.

Shopware 5 Passwörter können vom SW 5 Export direkt in das Feld „password“ der SW 6 Import-Datei übernommen werden. Die liegen schon in bcrypt vor.

Wie das bei Shopware 4 exporten aussieht weiß ich nicht. SW 4 habe ich nie benutzt. Vermute aber mal die waren nur MD5 verschlüsselt.

Moin @Plotec,

die bisherigen Passwörter / Daten stammen aus keinem Shopware System sondern aus modified. Dort wurde irgendwann (glücklicherweise) von md5 auf bcrypt umgestellt - allerdings mit einer selbstgeschriebenen Methode. Und diese setzt als Algorithmus ID $2a$ voran und nutzt 8 als cost factor - was meines Wissens eher aus der Ruby Welt kommt.

Somit habe ich es leider noch nicht hinbekommen, diese Passwörter zu übernehmen.


Ich habe es nun über einen eigenen LegacyEncoder gelöst. Somit umgeht man das Rehashing beim Import - und bei Login wird das Password dann „korrigiert“.

Hat schon jemand versucht aus Oxid Passwörter zu importieren? Die sind Md5 codiert und gesalzen.
Die neueren sind ggf. auch schon bcrypt codiert und gesalzen.
Es gibt zwei Spalten in der Datenbank: oxpassword und oxpasssalt.
Alle meine Versuche sind bisher gescheitert.
Hat jemand eine Idee dazu?

Hi,
wir stehen auch vor einem Wechsel von modified zu Shopware 6.
Darf ich deinen LegacyEncoder eventuell dafür anfragen oder fragen wie genau du das mit den Kennwörtern gemacht hast? :slight_smile:

Hej @Angeal,

klar darfst du. Ich habe dazu erst einmal eine Klasse angelegt (src/Core/Checkout/Customer/Password/LegacyEncoder/ModifiedBcrypt.php) als LegacyEndoder (im Plugin oder Theme) angelegt:

<?php declare(strict_types=1);

namespace ZD\Core\Checkout\Customer\Password\LegacyEncoder;

use Shopware\Core\Checkout\Customer\Password\LegacyEncoder\LegacyEncoderInterface;

class ModifiedBcrypt implements LegacyEncoderInterface
{
    public function getName(): string
    {
        return 'ModifiedBcrypt';
    }

    public function isPasswordValid(string $password, string $hash): bool
    {
        $verifyHash = $this->generateInternal($password, $hash);

        return hash_equals($hash, $verifyHash);
    }

    private function generateInternal(string $password, string $salt): string
    {
        return crypt($password, $salt);
    }
}

und dann in der services.xml referenziert.

<service id="ZD\Core\Checkout\Customer\Password\LegacyEncoder\ModifiedBcrypt">
    <tag name="shopware.legacy_encoder"/>
</service>

Beim Import der Kundendaten muss dann das alte Passwort in legacy_password importiert und in das Feld legacy_endoder bei Passwörtern, die mit $2a$ starten, ModifiedBcrypt, bei md5 codierten Passwörtern entsprechend Md5 eingetragen werden.

Ich hoffe, das hilft soweit.

2 „Gefällt mir“

Ist schon ein bisschen her hatte das selbe problem.

Für gesalzen lieber das

public function isPasswordValid(string $password, string $hash): bool
{
$stack = explode(‚:‘, $hash);

    if (sizeof($stack) != 2) return false;

    if (md5($stack[1] . $password) == $stack[0]) {
      return true;
    }
}

irgendwelchenummer : 2 zahlen ← so geht es.