Ausfüllen von discourse_username, wenn nicht DiscourseConnect verwendet wird

Dies war eine Frage in einem alten GitHub-Problem, das hier auf Meta leichter verfolgt werden kann
https://github.com/discourse/wp-discourse/issues/237
Von @mattdm:

Wir verwenden OpenID für die Anmeldung, und es scheint, dass diese Option nur verfügbar ist, wenn wir DiscourseConnect verwenden. Gibt es eine andere Möglichkeit? Das manuelle Ausfüllen ist ziemlich nervig.

Wir erlauben Benutzern, ihre E-Mail-Adresse (unterschiedlich von SSO) auf den Discourse-Sites zu bearbeiten, aber die Benutzer-ID ist garantiert dieselbe.

Meine erste Antwort (Fragen sind noch offen)

Hey @mattdm, könntest du ein paar Dinge klären:

  1. Kann die E-Mail-Adresse eines Benutzers zwischen seinen Konten auf WordPress und Discourse unterschiedlich sein?
  2. Was meinst du damit, dass “die Benutzer-ID garantiert dieselbe ist”? Welche Benutzer-ID meinen wir?
2 „Gefällt mir“

Oh, Entschuldigung – ich war mir sicher, dass ich das schon einmal beantwortet hatte, aber ich schätze… habe ich nicht? Vielleicht habe ich nur darüber nachgedacht! Jedenfalls:

  1. Die E-Mail wird zunächst für WordPress und Discourse vom SSO synchronisiert. Aufgrund der großen Nachfrage erlauben wir den Leuten jedoch, diese E-Mail auf Discourse zu ändern. (Es kommt häufig vor, dass man Benachrichtigungen von Discourse an eine andere E-Mail-Adresse erhalten möchte als die, die direkt mit dem Login verknüpft ist.) Es ist auch möglich, die E-Mail-Adresse auf WordPress zu ändern, aber ich kenne niemanden, der das tut, oder ob ausgehende E-Mails auf dieser Instanz überhaupt funktionieren.

  2. Mit „Benutzer-ID“ meinte ich „Benutzername“. Der Benutzername wird immer[1] für Discourse und WordPress vom SSO übernommen und kann vom Benutzer in keinem Fall geändert werden. Aus mir unbekannten Gründen, die aber wahrscheinlich damals Sinn ergaben, ist dies auf unserer SSO-Seite nickname; dies wird auf oauth2 json username path abgebildet.


  1. Tatsächlich gibt es nur wenige Konten wie meines, die eingerichtet wurden, bevor wir den SSO hatten, und sie sind falsch – ich bin „Matthew Miller“ statt mattdm. Aber das könnten wir bereinigen. ↩︎

hm ok, also effektiv

  1. Es gäbe eine Teilmenge Ihrer Benutzer mit unterschiedlichen E-Mails auf WordPress und Discourse.
  2. Ihr Benutzername ist garantiert derselbe, da er von Ihrem Identitätsanbieter sowohl für WordPress als auch für Discourse bereitgestellt wird.

Wenn wir den WP Discourse User Webhook von der DiscourseConnect-Funktionalität entkoppeln würden (möglich), dann würde die Benutzerabgleichung auf der Grundlage der E-Mail und nicht des Benutzernamens erfolgen. Ihre Situation ist etwas spezifisch für Ihre Identitätskonfiguration.

Ich denke, dieser Fall wird besser durch benutzerdefinierten Code auf Ihrem WordPress gehandhabt. Was Sie wollen, ist so etwas wie das hier:

function update_discourse_username( $user_login, $user ) {
    update_user_meta( $user->ID, 'discourse_username', $user_login );
}
add_action( 'wp_login', 'update_discourse_username', 10, 2);

Grundsätzlich wird das Metafeld discourse_username nach dem Login als WP-Benutzername zugewiesen, da diese garantiert gleich sind. Beachten Sie, dass “user_login” das ist, was der “Benutzername” manchmal im WordPress-Code genannt wird.

Ich komme nach mehreren Jahren darauf zurück. :slight_smile:

Irgendwann haben wir geändert, dass E-Mail-Adressen von unserem (OAuth2) SSO erzwungen synchronisiert werden. Wir sollten also auf diese Weise eine Übereinstimmung finden können. (Und selbst wenn es aus irgendeinem Grund eine Diskrepanz gibt, sollte es keinen Fall geben, in dem eine E-Mail jemand anderem gehört, also würde das schlimmstenfalls einfach fehlschlagen, oder?)

Gibt es eine Chance, dass der WP Discourse Benutzer-Webhook einfach funktioniert?

Wenn nicht… Ich bin kein WP-Experte, und unser WP wird gehostet, daher bin ich mir nicht sicher, ob wir eine einfache Möglichkeit haben, das Plugin anzupassen.

CC @jwheel

Ok, nur zur Klärung

Das ist nicht mehr der Fall?

Nur eine Anmerkung: Er funktioniert derzeit. Sie bitten um eine neue Funktion :slight_smile:

Darüber hinaus bitten Sie um eine neue Funktion, die ziemlich sorgfältig geprüft werden muss. Ich weiß, dass ich vor ein paar Jahren gesagt habe, dass es möglich sei, aber ich bin derzeit etwas zurückhaltend, dies als Kernfunktion des Plugins zu tun, da eine solche Funktion davon ausgehen müsste, dass E-Mail-Adressen auf WordPress ordnungsgemäß validiert werden, was nicht unbedingt eine sichere Annahme ist.

Das (WordPress-E-Mail-Validierung) liegt in der Verantwortung des Website-Administrators, aber ein Prinzip der Open-Source-Entwicklung ist es, etwas zu vermeiden, das in einer Teilmenge (auch einer kleinen Teilmenge) von Fällen zu schlechten Ergebnissen führt, vorausgesetzt, Sie haben keine Kontrolle über die Umgebung. Dieses Problem besteht weiterhin, ist aber bei DiscourseConnect gemildert.

Ich werde es genauer prüfen und mich später in dieser Woche bei Ihnen melden.

1 „Gefällt mir“

Wenn die E-Mail-Abgleichung zu kompliziert ist, habe ich das Gefühl, dass „Discourse-Benutzernamen stimmen immer mit WordPress überein (und umgekehrt)“ nicht so ungewöhnlich sein kann.

Selbst wenn jemand kein SSO-System hat, das einen eindeutigen Benutzernamen voraussetzt, muss es sicherlich viele kleinere Websites mit beispielsweise Dutzenden von WordPress-Benutzern geben, bei denen dies per Konvention zutrifft.

Für dieses Problem gibt es bereits eine Lösung. Discourse kann so konfiguriert werden, dass es der DiscourseConnect-Anbieter für WordPress ist (das Gegenteil der üblichen Konfiguration). Die Einrichtung ist einfach. Wenn diese Option aktiviert ist, gibt es eine optionale Einstellung, die es WordPress/Discourse-Konten ermöglicht, basierend auf der E-Mail-Adresse des Benutzers synchronisiert zu werden.

Es gibt sogar einen Link auf der Profilseite des Benutzers:


(Bearbeitung: Kann ein Bild ohne KI beschriftet werden?)

Beim Testen füllt das Klicken auf den Link auf der Profilseite das Feld “Discourse-Benutzername” nicht aus. Das sollte es aber. Das Klicken auf den Link “Mit Discourse anmelden”, der zur Anmeldeseite hinzugefügt werden kann, füllt das Feld “Discourse-Benutzername” automatisch aus.

Ich denke, der Sinn der Synchronisierung von Konten besteht darin, das Feld “Discourse-Benutzername” auf sichere Weise zu aktualisieren, daher lohnt es sich wahrscheinlich, sich anzusehen, was hier vor sich geht. Es scheint auch ein Problem zu geben, bei dem Konten mit einer “nicht verifizierten” E-Mail-Adresse in WordPress ihre Konten mit Discourse synchronisieren dürfen. Das sollte standardmäßig wahrscheinlich nicht erlaubt sein.

In Ihrem Fall möchten Sie Benutzern möglicherweise nicht erlauben, sich über Discourse bei WordPress anzumelden. Es sollte möglich sein, einfach den Link auf der Profilseite zu verwenden, damit Benutzer ihre Konten synchronisieren können, sodass ihr Discourse-Benutzername automatisch ausgefüllt wird. Sie sollten die Anmeldung bei WordPress über Discourse nicht aktivieren müssen, damit dies funktioniert.

Ein möglicher Nachteil dieses Ansatzes ist, dass die Benutzer ihn initiieren müssen. Es gäbe keine Schaltfläche, auf die Administratoren klicken könnten, um den Discourse-Benutzernamen eines Benutzers zu erhalten.

Das erscheint albern. Wir haben ein zentralisiertes SSO. Wir sollten nicht einige unserer Dienste so konfigurieren müssen, dass sie andere zufällige Dienste als Authentifizierungsanbieter verwenden, nur um sie zum Laufen zu bringen. Das ist ein Weg in den Wahnsinn.

Lassen Sie sich nicht vom Namen (DiscourseConnect) täuschen. Wenn die von mir beschriebene Funktion so funktionieren würde, wie sie sollte, wäre sie lediglich eine Möglichkeit für einen WordPress-Benutzer zu bestätigen, dass er ein Discourse-Konto mit einer übereinstimmenden E-Mail-Adresse hat, und seinen Discourse-Benutzernamen automatisch in WordPress eintragen zu lassen. Dies würde das Authentifizierungssystem Ihrer Website nicht beeinträchtigen.

Es wird niemals einen übereinstimmenden Identitätsmechanismus von Wordpress-Benutzernamen zu Discourse-Benutzernamen im Kern-Plugin geben, selbst hinter einer Einstellung. Die einzige Möglichkeit in diesem Kontext ist die Übereinstimmung von E-Mail-Adressen. Ich habe beschlossen, die Übereinstimmung von E-Mail-Adressen als Fallback-Mechanismus für den Benutzer-Webhook hinzuzufügen. Dies wird in der nächsten Version enthalten sein, die in einigen Wochen erscheinen wird.

1 „Gefällt mir“

Um diesen Punkt abzuschließen: Die neueste Version des Plugins 2.5.4 enthielt verschiedene Updates für Webhooks, einschließlich der Entfernung der DiscourseConnect-Anforderung für die Einstellung „Benutzer per E-Mail abgleichen“. Weitere Informationen finden Sie unter

1 „Gefällt mir“

Ich glaube, das wird unser Problem lösen, zumindest in 99 % der Fälle. Danke!!!

@jwheel Zu Ihrer Information: Ich habe dies auf unserer Website aktiviert.

2 „Gefällt mir“

Großartig, ich werde es für zukünftige Themen mit dem Plugin im Auge behalten.

2 „Gefällt mir“