Nicht möglich, Benutzer in Discourse aus WP mit neuem Registrierungsformular zu erstellen

Ich habe Discourse Connect mit WP als Hauptinstanz für Registrierung und Anmeldung eingerichtet.

Ich habe zwei Benutzerregistrierungsformulare mit unterschiedlichen Abläufen:

  1. Standardregistrierung von der Homepage (dies ist die alte und erstellt immer noch einen Benutzer in Discourse)
  2. Benutzerregistrierung über einen Tool-Flow. (dies erstellt den WP-Benutzer, aber keinen Benutzer in Discourse).

Ich sehe keine Einstellungen im Discourse-Plugin, die spezifisch für ein Registrierungsformular sind. Wenn ich zum Benutzer gehe, sehe ich keinen Discourse-Benutzernamen in WP für das zweite Formular. Link

Ich habe zwei Fragen:

  1. Was könnte ich hier übersehen? Ist eine zusätzliche Einrichtung erforderlich, damit es für ein neues Formular funktioniert?
  2. Wie kann ich einen Benutzer in Discourse erstellen und ihn mit WordPress für Mitglieder verbinden, die in WP existieren?

Korrektur: Nach weiterer Analyse scheint es, dass einige Benutzer auch über das erste Formular nicht in Discourse erstellt werden.

1 „Gefällt mir“

Hat jemand dieses Problem schon einmal gehabt? Ich stecke hier wirklich fest.

Hallo @Himanshu_Singh,

Könnten Sie mir Schritt für Schritt erklären, wie ein Benutzer es sieht:

  1. Was passiert mit Ihrem „Standardregistrierungs“-Formular?
  2. Was passiert mit Ihrem „Benutzerregistrierungs“-Formular?

z. B.

  1. Ein Benutzer geht zum Formular und gibt seine Daten ein
  2. Ein Benutzer wird zu Discourse weitergeleitet..

Fügen Sie die Schritte ein, bei denen etwas passiert, das Sie nicht möchten, und die Schritte, die stattdessen passieren sollen.

2 „Gefällt mir“

Hallo Angus,

Bei der Standardregistrierung:

  1. Der Benutzer geht zum Formular und gibt seinen Namen, seine E-Mail-Adresse und sein Passwort ein.
  2. Dann wird der Benutzer automatisch angemeldet.
  3. Wenn der Benutzer dann auf den Community-Link klickt, wird er automatisch bei Discourse angemeldet (da das Discourse Connect-Plugin inzwischen seine Aufgabe erfüllt hat, einen neuen Benutzer in Discourse zu erstellen).

Für das zweite Formular:

  1. Der Benutzer gibt einen Namen und eine E-Mail-Adresse ein.
  2. Wir stellen ihm ein temporäres Passwort zur Verfügung.
  3. Der Rest des Prozesses ist derselbe, d. h. der Benutzer wird bei der Anmeldung automatisch angemeldet.
  4. In diesem Fall wird der Benutzer jedoch nicht in Discourse erstellt.

Ich sehe keine Einstellung in Discourse Connect, die durch die Änderung eines Registrierungsformulars ausgelöst wird. Gibt es einen Hook, der bei der Benutzerregistrierung in WP ausgelöst werden muss und der im Fall des zweiten Formulars nicht ausgelöst wird?

Welcher Hook in WordPress wird eigentlich verwendet, um einen Benutzer in Discourse zu erstellen? Es muss ein API-Aufruf erfolgen, um Aktivitäten in Discourse auszulösen. Könnte dieser aus irgendeinem Grund nicht ausgelöst werden?

1 „Gefällt mir“

Was passiert mit diesen Benutzern, wenn sie in Discourse auf „Anmelden“ klicken? Beschreiben Sie genau, was passiert, wenn sie dies versuchen. Ich verstehe, dass der Benutzer nach der Erstellung in WordPress nicht in Ihrem Admin-Panel angezeigt wird, aber dies ist eine etwas andere Frage.

1 „Gefällt mir“

Erster Fall, in dem der Benutzer in WP registriert ist –
Der Benutzer muss sich in Discourse nicht anmelden und wird automatisch angemeldet, indem er auf den folgenden Link in WP klickt –

https://community.showprowess.com/session/sso?return_path=/

Wenn ich nur den Link – https://community.showprowess.com/ – verwende, um von WP zu Discourse zu gelangen, ist der Benutzer nicht angemeldet und ich muss auf die Schaltfläche „Anmelden“ in Discourse klicken, um den Benutzer anzumelden.

Sobald der Benutzer angemeldet ist, bleibt er angemeldet, bis ich mich von WP abmelde.

Dies schafft ein Problem, denn wenn der Benutzer nicht auf /session/sso?return_path=/ klickt, ist der Benutzer nicht angemeldet. Dies hindert mich daran, den Benutzer von WP zu einer privaten Nachrichtenseite in Discourse weiterzuleiten. (eine Funktionalität, die ich als Teil des Produkts benötige)

Zum Beispiel möchte ich eine private Nachricht an Benutzer X senden.
Ich füge diesen Link zu ihrem benutzerdefinierten Beitrag in WP hinzu –
https://community.showprowess.com/new-message?username=x&title=Message%20from%20

Da dies der erste Link ist, auf den ich klicke, öffnet sich das Nachrichtenfeld nicht. Stattdessen werde ich bei Discourse angemeldet. Jetzt muss ich zurückgehen und erneut auf denselben Link (Nachrichtenlink) klicken, damit er funktioniert.

Es sieht so aus –

Das ist für die Benutzer ärgerlich.

Früher hat das alles einwandfrei funktioniert, da der Benutzer automatisch bei Discourse angemeldet wurde und die URL https://community.showprowess.com mich zu einer angemeldeten Discourse-Seite führte. Vielleicht wurde der Benutzer über Browser-Cookies oder Ähnliches angemeldet, aber das funktioniert nicht mehr.

Wenn der Benutzer nicht bei Discourse registriert ist
Dies geschieht bei beiden Formularen, d. h. bei den neuen und den alten.
In diesem Fall habe ich mich erneut angemeldet und den Onboarding-Prozess durchlaufen. Diesmal wurde der Benutzer in Discourse erstellt. Davor existierte der Benutzer nicht in Discourse (ich habe die Liste der neuen Benutzer im Admin-Bereich überprüft, bevor ich mich erneut angemeldet habe).
Ich habe die gleichen Schritte wie oben befolgt – auf die URL /sessions klicken, um mich automatisch bei Discourse anzumelden. Wenn ich nur auf die Community-Domain klicke, wird keine Anmeldung durchgeführt.

Leider kann ich den Fall, dass der Benutzer bei der Registrierung nicht erstellt wird, aber bei der ersten Anmeldung erstellt wird, nicht reproduzieren. Dies geschieht nicht bei jeder einzelnen neuen Benutzerregistrierung, was sehr seltsam ist.

Ich hoffe, das hilft.

1 „Gefällt mir“

Um ehrlich zu sein, bin ich etwas verwirrt, wie diese Beschreibung Ihres Problems mit Ihrer früheren Beschreibung eines Problems zusammenhängt, das durch zwei verschiedene Wordpress-Registrierungsformulare verursacht wird. Aber ich denke, ich kann Ihnen trotzdem helfen.

Eine Sache, die man verstehen muss, ist, dass es keine Möglichkeit gibt (und nie gab), sofort in zwei verschiedenen Diensten auf zwei verschiedenen Domains angemeldet zu sein. Wenn es so aussieht, als wären Sie in Dienst A auf Domain A angemeldet und wenn Sie zu Dienst B auf Domain B gehen, sind Sie ebenfalls angemeldet, dann ist tatsächlich passiert, dass Sie in Dienst B über Dienst A angemeldet wurden, sobald Sie Domain B besuchen und ein Anmeldevorgang eingeleitet wird, nicht vorher.

Eine weitere Sache, die man verstehen muss, ist, dass die meisten Benutzer sich außerhalb des spezifischen Szenarios, das Sie beschreiben, bei dem Sie eine Person an einen bestimmten Ort in der App weiterleiten möchten, der eine Sitzung erfordert, nicht darum kümmern oder bemerken, dass sie manchmal auf „Anmelden“ bei Dienst B klicken müssen. Nach meiner Erfahrung mit Kunden bei Identitätslösungen sind Website-Administratoren hier in der Regel empfindlicher als ihre Benutzer.

Die Funktionsweise hat sich nicht geändert. Wenn es so aussieht, als wäre ein Benutzer „automatisch“ angemeldet, passiert tatsächlich, dass er zurück zu Wordpress weitergeleitet und dann zurück zu Discourse weitergeleitet wird, sobald seine Sitzung in Wordpress authentifiziert wurde. Wenn er bereits in Wordpress angemeldet ist, wird es so aussehen, als wäre er „automatisch“ bei Discourse angemeldet, da diese Weiterleitung erfolgt, ohne dass der Benutzer etwas tun muss.

Eine Möglichkeit, die „automatische“ Anmeldung auszulösen und ihn nach der Anmeldung an einen bestimmten Ort in Discourse weiterzuleiten, ist die Verwendung des von Ihnen bereits geteilten Pfads

https://community.showprowess.com/session/sso?return_path=[any path in Discourse]

Wenn der Benutzer bei Verwendung dieser URL bereits in Wordpress angemeldet ist, aber noch nicht bei Discourse, geschieht Folgendes:

  1. Discourse startet automatisch den DiscourseConnect-Anmeldevorgang
  2. Der Browser des Benutzers wird zu Wordpress weitergeleitet
  3. Der Benutzer ist bereits angemeldet, daher wird der Benutzer automatisch zurück zu Discourse weitergeleitet
  4. Wenn in der URL, die in Schritt 1 verwendet wurde, ein return_path-Wert vorhanden war, wird der Benutzer dorthin weitergeleitet.

Aus Sicht des Benutzers wird sein Browser kurz geladen, aber er wird effektiv „automatisch“ bei Discourse angemeldet und an einen bestimmten Teil der App weitergeleitet.

Beachten Sie, dass Sie den return_path tatsächlich zu jeder URL machen können, sogar zu einer separaten Domain, wenn Sie die Website-Einstellung discourse connect allows all return paths auf true setzen.

2 „Gefällt mir“

Vielen Dank! Das ist hilfreich bei der Lösung des Problems der automatischen Anmeldung des Benutzers von WP bei Discourse. Ich kann den return_path verwenden, um den Benutzer zu jeder Seite in Discourse weiterzuleiten. Dies löst das Problem der Weiterleitung des Benutzers zur Nachrichtenseite.

Ich bin mir jedoch immer noch nicht sicher, warum in einigen Fällen der Benutzer nicht in Discourse erstellt wird, wenn der Benutzer in WordPress erstellt wird. Wissen Sie, wann der Benutzer wirklich von SSO in Discourse erstellt wird?

  1. Wird er erstellt, wenn ein Benutzer in WP erstellt wird?
  2. Wird er erstellt, wenn ein neuer WordPress-Benutzer versucht, auf Discourse zuzugreifen, und dann der Benutzer erstellt, angemeldet und zu Discourse weitergeleitet wird?

Welchen Hook verwenden wir in WP, um einen Benutzer in Discourse zu erstellen?

Ich versuche zu verstehen, welcher Randfall keinen Benutzer in Discourse erstellt, wenn ein Benutzer in WP erstellt wird.

Praktischer Anwendungsfall:
Ich begrüße jede Woche neue Benutzer mit einer Nachricht. Letzte Woche traten 30 Benutzer bei WP bei und 16 wurden in Discourse erstellt. Wenn ich sie in einer Willkommensnachricht markieren möchte, kann ich nicht alle markieren – was mir sehr seltsam vorkommt.

Danke für deine Hilfe, Angus. Ich weiß es zu schätzen.

1 „Gefällt mir“

Mit den Standardeinstellungen werden Benutzer in Discourse erstellt, wenn sich der Benutzer zum ersten Mal über DiscourseConnect bei Discourse anmeldet. Bis zu diesem Moment existiert kein Benutzer in Discourse.

Das WP Discourse Plugin hat auch eine Einstellung “Benutzer in Discourse erstellen oder synchronisieren bei der Anmeldung”, die, wenn aktiviert, einen Benutzer über die Discourse API erstellt, nachdem sich der Benutzer in WordPress registriert hat. Diese Einstellung verwendet die wp_login-Aktion, sodass Ihr Benutzerregistrierungsprozess diese Aktion auslösen muss, damit diese Funktion funktioniert.

2 „Gefällt mir“

Jetzt ergibt alles Sinn. Danke, Angus.

Ich habe die Einstellung „Discourse-Benutzer bei der Anmeldung erstellen oder synchronisieren“ aktiviert. Der Benutzer wird in Discourse nicht erstellt, da sich einige Benutzer bei WP registrieren, aber die Community beim ersten Login nicht besuchen. Sie kehren möglicherweise zurück, melden sich an und klicken dann auf die Community-URL, und dann wird der Benutzer erstellt.

Die aktuelle automatische Anmeldung nach der Registrierung bei WP verwendet nicht WP_login

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );

function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Nach Bedarf bearbeiten
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit();
  }
}

Ich würde es vorziehen, den Benutzer bei der WP-Registrierung in Discourse zu erstellen.
Ich habe benutzerdefinierte Hooks im Benutzerregistrierungsformular, die die API ausführen können. Gibt es einen Code, den ich dem benutzerdefinierten Hook hinzufügen kann, um einen Benutzer über die API in Discourse zu erstellen?

Das ist der Teil, den ich nicht weiß, wie ich ihn tun soll, d. h. wp_login von einem benutzerdefinierten Hook aus auslösen.

2 „Gefällt mir“

Fügen Sie einfach einen Aktions-Trigger zu Ihrem Code hinzu.

do_action( 'wp_login' );
2 „Gefällt mir“

Ich habe genau das getan, was Sie mir gesagt haben.

add_action( 'cred_save_data', 'cred_autologin_V3', 10, 3 );

function cred_autologin( $post_id, $form_data ){
  if ( ID1 == $form_data['id']  ) { // Nach Bedarf bearbeiten
    wp_set_current_user( $post_id );
    wp_set_auth_cookie( $post_id );
   do_action( 'wp_login' );

//    wp_redirect( home_url( '/some-ending-page/' ) );
  //  exit();
  }
}

Aber ich erhalte die folgende Fehlermeldung:
Nachricht: Uncaught ArgumentCountError: Too few arguments to function WPDiscourse\WordPressEmailVerification\WordPressEmailVerification::verify_email_after_login(), 1 passed in /home/customer/www/[domain.com/public_html/wp-includes/class-wp-hook.php on line 307 and exactly 2 expected in /home/customer/www/[domain.com/public_html/wp-content/plugins/wp-discourse/lib/wordpress-email-verification.php:128**

Ich habe einen anderen Code, der die E-Mail-Verifizierung umgeht

add_filter( 'discourse_email_verification', 'disable_discourse_email_verification_prowess');
function disable_discourse_email_verification_prowess() {
  wp_mail( 'himanshu@eshowprowess.com', 'User verified', 'Status must change' );

    return false;
}

Ist dies ein Problem mit der Code-Reihenfolge oder muss ich dem wp_login-Hook einen Parameter übergeben?

Bearbeiten: Der Benutzer wurde in WP erstellt und angemeldet, aber der Benutzer wurde nicht in Discourse erstellt.

1 „Gefällt mir“

Ich schlage vor, Sie lesen sich die Aktion durch. Die WP-Dokumentation ist hierfür eine bessere Ressource als ich. Ich werde leider nicht herausfinden können, wie ich Ihren benutzerdefinierten WP-Login-Code hier am besten integrieren kann. Was das Problem betrifft, das Sie haben, denke ich, wir sind ihm auf den Grund gegangen.

3 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.