Neue Wordpress-Benutzer verbinden sich mit bestehenden Discourse-Benutzern

tl;dr - Wenn sich ein neuer WordPress-Benutzer registriert oder eine Bestellung aufgibt, scheint er bestehende Benutzer in Discourse zu überschreiben oder mit ihnen zu verknüpfen. Ich bin mir nicht sicher, wie ich das beheben kann.

Hintergrund:

  • Wir verwenden das wp-discourse-Plugin für SSO, wobei WordPress der DiscourseConnect-Anbieter ist.
  • Wir haben unsere Discourse-Community gestartet, die auf einem Digital Ocean Droplet gehostet wird.
  • Als wir die Discourse-Community starteten und uns über das wp-discourse-Plugin mit SSO verbanden, hosteten wir WordPress auf AWS Lightsail und verwendeten Plesk als unser Control Panel.
  • Wir sind Anfang des Jahres zu Nexcess WordPress Managed Hosting migriert und der Discourse-Connector schien intakt geblieben zu sein.
  • Wir haben unsere Benutzer nicht migriert, als wir zu unserer neuen WordPress-Installation wechselten. Sie wurden exportiert und wir planen, sie bald zu importieren.
  • Unsere WordPress-Seite war eine Weile geschlossen, da wir einige große Anpassungen vorgenommen haben.

In den letzten Monaten haben viele Leute Bestellungen auf WordPress (WooCommerce) aufgegeben, und wir haben etwas Seltsames bemerkt… Wenn man sich ein Benutzerkonto in WordPress ansieht und das Feld Discourse Username betrachtet, wird der Benutzername als der von bestehenden Benutzern aus Discourse angezeigt. Irgendwie scheint unsere Verbindung zu Discourse durcheinander geraten zu sein. Ein Benutzer hat sich heute registriert und sein Discourse Username ist tennisdpm, was, wie Sie sehen können, ein bestehender Benutzer ist, der sich 2020 registriert hat. :thinking:

Wir werden bald alle Benutzer, die Konten auf unserer alten WordPress-Instanz hatten, migrieren (hinzufügen) und sie zu unserer neuen Instanz hinzufügen. Da es jedoch anscheinend Konflikte mit bestehenden Benutzern und neu registrierten Benutzern gibt, möchten wir einen Aktionsplan haben, der weitere Konflikte verhindert und bestehende WP-Benutzer (über E-Mail als eindeutigen Identifikator) mit Discourse-Benutzern synchronisiert und neue SSO-Discourse-Konten bereitstellt, wenn neue WP-Benutzer hinzukommen.

Wir würden uns sehr über Hilfe und Anleitungen freuen, wie wir vorgehen sollen!

Bestehende wp-discourse Connect SSO-Einstellungen:

Es klingt, als ob Ihre neuen WP-Benutzer Benutzer-IDs erhalten, die vorhandenen DiscourseConnect-externen IDs entsprechen.

2 „Gefällt mir“

Oh mein Gott!! Danke für den Hinweis @omarfilip! Gibt es eine Möglichkeit, dies zurückzusetzen oder zu verhindern, dass dies weiterhin geschieht? Oder könnten/sollten wir dies deaktivieren, bis wir alle ehemaligen Benutzer migriert haben.

Ich bin mir nicht sicher, wie ich es am besten angehen soll. Wie viele Datensätze müssen korrigiert werden?

Wir haben derzeit etwa 80 Benutzer in WP, die von den aktuellen Discourse-Benutzern, mit denen sie anscheinend verknüpft sind, „getrennt“ werden müssen. Dann müssen wir auch etwa 750 Benutzer aus unserer alten Instanz importieren und sicherstellen, dass sie nicht dasselbe Problem haben, das wir gerade haben.

Ich hatte gehofft, dass Konten in WP mit Discourse-Konten basierend auf der E-Mail-Adresse als eindeutigem Identifikator verknüpft waren … nicht externe/Benutzer-IDs.

Hallo @jord8on, die Art und Weise, wie das Matching auf der Discourse-Seite funktioniert, ist, dass es zuerst versucht, die externe ID abzugleichen (die in Ihrem Fall jetzt auf verschiedene Benutzer verweist, da Sie Ihre WordPress-Datenbank geändert haben) und dann versucht, anhand der E-Mail-Adresse abzugleichen. Es gibt einige gute Gründe, zuerst die ID zu verwenden. E-Mail ist keine gute dezentrale Kennung.

Sie müssen also die Single-Sign-On-Datensätze in Discourse löschen, die erstellt wurden, als Sie Ihre alte WordPress-Datenbank verwendet haben. Sie können ein Datum und eine Uhrzeit verwenden, um sie zu identifizieren. Sie würden zum Beispiel Folgendes auf Ihrer Discourse-Instanz tun:

./launcher enter app
rails c
SingleSignOnRecord.where("created_at < ?", 1.month.ago) // Prüfen Sie, ob dies Ihren Erwartungen entspricht
SingleSignOnRecord.where("created_at < ?", 1.month.ago).delete_all

Die alten Benutzer, die in die neue DB importiert werden, werden anhand der E-Mail-Adresse mit ihren vorhandenen Discourse-Konten abgeglichen (da ihre neue WordPress-ID mit keinen SSO-Datensätzen übereinstimmt).

Ich würde auch alle discourse_username-Daten in WordPress entfernen und sie automatisch über den Benutzer-Webhook neu synchronisieren lassen. Sie müssen dies ausführen (vielleicht mit WP CLI), was alle Einträge für das discourse_username-Metafeld löscht.

delete_metadata( 'user', 0, 'discourse_username', '', true );

Für zukünftige Leser: Wenn Sie DiscourseConnect mit einer WordPress-Datenbank verwenden und dann zu einer völlig neuen WordPress-Datenbank ohne Migration wechseln, werden Sie dieses Problem haben. Sie sollten Hilfe suchen, bevor Sie eine solche Änderung vornehmen.

2 „Gefällt mir“