Hallo zusammen,
zur Info für alle, die es eventuell betrifft:
wir haben in einem Kundenprojekt, oxid ce 4.8., das bestit amazon pay & login Modul im Einsatz und folgenden (wahrscheinlichen) Bug oder Design-Fehler gefunden:
Wenn ein Kundendatensatz in der oxuser-Tabelle vorhanden ist, allerdings kein Passwort hat - also NL Anmeldung, Gastbestellung mit Zahlungsart != amazon payments - und dieser Kunde sich anschließend irgendwann mittels amazon login im Shop einloggt, dann wird, falls seine bereits in oxuser.oxusername hinterlegte Mail der Amazon-Mail entspricht, der alte Datensatz im oxid gelöscht und ein neuer erstellt.
Dies ist ein massives Problem, da bei Bestellungen die oxorder.oxuserid somit auf einen nicht existierenden oxuser Datensatz verweist. Insbesondere im Zusammenhang mit weiteren Modulen/Workflows, die ebenfalls ausgehend vom oxorder.oxuserid Eintrag einen Kunden referenzieren möchten.
Der Fehler ist in der Klasse bestitAmazonPay4Oxid_oxcmp_user in der Funktion amazonLogin() in der Prüfung der Rückgabe von OxidUserExists(). Hier wird nur anhand des (nicht)gesetzten Passwort-Feldes unterschieden. Der Fehler lässt sich einfach korrigieren, allerdings wäre es wünschenswert, wenn bestit hier nachzieht.
Wahrscheinlich wäre es ideal, einen solchen Datensatz dann zu aktualisieren, damit die Konsistenz oxorder.oxuserid=oxuser.oxid gewährleistet wird.
Ein Update der oxorder.oxuserid auf die neu vergebene oxuser.oxid wäre ebenfalls denkbar, allerdings wird die alte oxuser.oxid eventuell an weiteren Stellen (diverse Module/Workflows) referenziert.
Viele Grüße
Stephan