Memberpress: Wie man Benutzer beim Anmelden zu Gruppen hinzufügt

Hi Eva, I went over your code and there’s no errors that I can spot - and I totally get your frustration. If it hadn’t been for Simon Cossar I don’t know how I’d have resolved it myself.

So, taking it backwards: if the PHP is correct, then something else must be disconnected. (browniepoints for me, yay.)

But…
I don’t know enough about any of that to be able to give suggestions or help.
If you’ve got your forum parked with the boys from Discourse Hosting, you could ask Richard (his name tag won’t pop, but this is his profile: Profile - RGJ - Discourse Meta )

Or perhaps @simon might be able to provide you with the missing steps.

Keeping my fingers crossed for you.

edit:
p.s. these are all the related plug-ins i use (+ that PHP one)
(Memberpress Drip is email marketing, so not related to this)

At least the code is okay…

Just going to ask some easy questions just to be sure it’s not a stupid mistake :

On discourse :

  • Are your groups hidden/closed/opened ?
  • Is your group full name different from the name and default title ? Which one is considered by the PHP code ?
  • Have you done anything special in the parameters section concerning this ?

On wordpress :

  • Does your WP-Discourse plugin have specific settings/webhooks for this ?
  • Do you validate the user’s email when they register on wordpress or you use Discourse’s email validation ?

I’m not sure the issue is there but I always take a shot, thank you again !

On Discourse:

  • groups are any and all: closed and opened (i don’t give access to hidden groups, come to think of it)
  • these are some of the group names as displayed in ‘Groups’ - and as you can see, the “NoSpacesNames” are the ones that coincide with the PHP settings
    26
    54
  • If by parameters you mean the following, then no:
    22

nor in the actual group settings (where you create it, with name, owner, etc.), it’s all straight forward and not connected to accessing through SSO - so setting or not setting this as a person’s primary group is not relavant.

There is one webhook here on Discourse that I put in as instructed by the WP-Discourse plugin:


but I don’t actually have that box checked…

  • email verification technically goes via memberpress: they (my wp-instance) send the log-in details to the user. by clicking the log-in link the users verify their address.
    i know for a fact that it’s not through Discourse, because for a while it ALSO went through discourse (glitch somewhere) and Richard sorted that for me.

you’re welcome!

Ist es mit dieser Methode möglich, Mitgliedern in Discourse automatisch das Vertrauenslevel 2 zuzuweisen, wenn sie ein Konto durch Zahlung erstellen, und es auf Vertrauenslevel 1 herabzustufen, wenn sie nicht monatlich zahlen?

Ich habe mich schon eine Weile nicht mehr damit beschäftigt, aber was du brauchst, ist eine Kommunikation zwischen deinem Discourse-Code und deinem Zahlungscode (in meinem Fall: MemberPress).

Wenn also jemand die Zahlung einstellt, ändert MemberPress seinen Code, und dieser Code entspricht einem anderen Gruppenlevel.
Wenn keine Verbindung zur Zahlung besteht, wird das Gruppenlevel nicht angepasst.

Ah, warte.
Ich lese deine Frage noch einmal: Ich bin mir nicht sicher, wie das mit den Vertrauensstufen funktioniert…
aber… falls alles andere scheitert, kannst du ganz einfach eine GRUPPE erstellen, die auf Vertrauensstufe 2 gesetzt ist, und eine andere auf Vertrauensstufe 1, und dein Mitgliedschafts-Plugin weist diese Gruppen dann deinen Mitgliedern zu.

Ich hoffe, das hilft. Falls nicht, muss ich mich wieder tiefer damit beschäftigen. Es läuft seit dem vorherigen Gespräch ohne Unterbrechung, und ich habe mich seither nicht mehr damit befasst.

Das ist eine großartige Idee! Ja, wir können Vertrauensebenen für Discourse-Gruppen festlegen. Allerdings bin ich mit Memberpress nicht ausreichend vertraut.

Können wir zahlende Nutzer in Memberpress automatisch einer speziellen Gruppe zuweisen?

Dies wurde heute in einem anderen Beitrag auf Meta angesprochen, daher habe ich mir den Code angesehen, um zu überprüfen, ob der Vertrauensstufen eines Benutzers durch das Hinzufügen zu einer Gruppe, die eine niedrigere Vertrauensstufe als die des aktuellen Benutzers festlegt, herabgestuft werden kann. Bei der Durchsicht des Codes stelle ich fest, dass dies nicht möglich ist:

  def grant
    if @user.trust_level < @trust_level
      @user.change_trust_level!(@trust_level)
      @user.save!
    end
  end

Ist die Vertrauensstufe eines Benutzers niedriger als die Vertrauensstufe, die von der Gruppe gewährt wird, aktualisiert das Hinzufügen des Benutzers zu der Gruppe dessen Vertrauensstufe. Andernfalls ändert sich die Vertrauensstufe des Benutzers nicht.

Es gibt wahrscheinlich noch andere Membership-Plugins, die dasselbe für dich erledigen können.

Bei uns ist es jetzt 20 Uhr, und ich schließe für den Tag ab. Falls du weitere Hilfe brauchst, würde ich mich gerne morgen früh darum kümmern. Sag einfach Bescheid.

Ich bin etwas eingerostet (außerdem ist es spät), aber das Vertrauensniveau wäre eigentlich nicht relevant. Ich verwende Vertrauensniveaus überhaupt nicht. Die Gruppe mit TL 2 hat Zugriff auf „dieses“ Feature, die Gruppe mit TL 1 nicht.
Das tatsächliche Vertrauensniveau wird nicht verwendet. Jedes Mitglied kann Vertrauensniveau 1 haben und trotzdem (durch Zahlung) Zugriff auf die Gruppe TL 4 erhalten – vorausgesetzt, ich stelle die Berechtigungen nicht auf Vertrauensniveaus, sondern nur auf Gruppen ein.

Ja, der richtige Ansatz besteht darin, Gruppen- und Kategoriensicherheitsberechtigungen zu verwenden. Es sollte keine Notwendigkeit bestehen, sich auf Vertrauensstufen zu verlassen.

@Dani1, danke, dass du deine Erfahrungen und Herausforderungen hier geteilt hast. Das ist sehr hilfreich für andere, die wie ich MemberPress nutzen.

Das ergibt Sinn, aber ich bin neugierig, was passiert, wenn das Abo des Mitglieds ausläuft und es sich nie ausloggt, sodass es weiterhin auf die Gruppe zugreifen kann… Ist dir das schon einmal als Problem aufgefallen?

Falls ja, frage ich mich, ob es eine Möglichkeit gibt, ein Force-Refresh oder eine automatische Ausloggung zu erzwingen…

Vielen Dank!
Ray

Sie müssen das Memberpress-Ereignis abfangen und die Gruppen entsprechend anpassen.

Siehe auch Bring over permission level from WordPress MemberPress - #2 by simon und Manage group membership in Discourse with WP Discourse SSO

@RGJ Der Code, der oben als Lösung markiert ist, entfernt zwar Mitglieder aus Gruppen, aber wie Dani1 erwähnt hat, tritt dies erst in Kraft, wenn sie sich abmelden.

Wenn ein Benutzer über den normalen SSO-Anmeldevorgang aktualisiert wird, erfolgt die Aktualisierung erst, wenn er sich abmeldet und erneut anmeldet. Das obige Codebeispiel ist der einfachste Weg, das Problem anzugehen, aber wahrscheinlich nicht die beste Methode, um Gruppenmitgliedschaften zu verwalten.

Das WP Discourse-Plugin verfügt über einige Hilfsfunktionen, die aktiviert werden, wenn WordPress als SSO-Anbieterseite für Discourse fungiert. Diese Funktionen ermöglichen es Ihnen, Gruppenmitgliedschaften zu aktualisieren, ohne dass sich der Benutzer von Discourse abmelden muss. Diese Funktionen befinden sich im Thema, auf das Richard verlinkt hat: Manage group membership in Discourse with WP Discourse SSO.

Der Beitrag, auf den Richard verlinkt hat enthält einige Details zu den beiden verschiedenen Ansätzen. Ich werde diese Details nächste Woche dem #howto-Thema hinzufügen. Für den Moment wäre es gut, den Beitrag durchzulesen.

Ah, ich glaube, ich habe es verstanden. Ein Teil meiner Verwirrung lag in diesem Thread: Bring over permission level from WordPress MemberPress - #2 by simon. Ganz unten wurde auf diesen Thread als Lösung verwiesen, was verwirrend war.

Es ist immer noch über meinem bescheidenen Verständnis, aber ich freue mich auf deine howto zu diesem Thema.

Vielen Dank an alle für eure Hilfe!
Ray

Dann melde sie ab :slight_smile:
Etwas in dieser Richtung sollte funktionieren:

  $url = sprintf('https://%s/users/by-external/%d.json', $discourseHostname, $wpUserID);
  $options = [
    'headers' => [
      'Api-Key' => $apiKey,
      'Api-Username' => 'system'
    ]
  ];
  $request = wp_remote_get($url, $options);
  if (wp_remote_retrieve_response_code($request) != 200) {
	return; // Benutzer nicht gefunden, Abbruch
  }
  
  $userData = json_decode(wp_remote_retrieve_body($request), true);
  if (!isset($userData['user']['id'])) {
	return false; // Falsche Antwort, Abbruch
  }
  
  $discourseUserID = $userData['user']['id'];
  
  $url = sprintf('https://%s/admin/users/%d/log_out', $discourseHostname, $discourseUserID);
  $options = [
    'headers' => [
      'Api-Key' => $apiKey,
      'Api-Username' => 'system'
    ]
  ];
  $request = wp_remote_post($url, options);

Du kannst sie im Auftrag abmelden. Einfach sie impersonieren.

Tatsächlich solltest du sie schon durch den Besuch ihrer Benutzerdetails abmelden können.

(Offensichtlich ist das alles sehr manuell. Ich habe nur eine Handvoll Leute und weiß genau, was jeder gerade macht. Richards Lösung habe ich noch nicht ausprobiert, aber gut zu wissen, dass sie existiert!)

Könntest du bitte, sobald das passiert, hier einen Link hinzufügen? Danke!

Sicher, das Thema findest du hier: Manage group membership in Discourse with WP Discourse SSO. Es beschreibt, wie man die Funktionen add_user_to_discourse_group und remove_user_from_discourse_group von WP Discourse verwendet. Angenommen, deine WordPress-Website ist als SSO-Anbieter für Discourse konfiguriert, sind dies die Funktionen, die du zur Verwaltung von Gruppenmitgliedschaften in Discourse verwenden solltest.

Das im Thema verwendete Beispiel bezieht sich auf das Plugin PaidMembershipsPro, aber ein ähnlicher Ansatz sollte auch mit jedem gut gestalteten WordPress-Mitgliedschaftsplugin funktionieren.

Ich werde dem Thema einige Details hinzufügen, wie man Gruppenmitgliedschaften mit den SSO-Parametern add_groups und remove_groups verwaltet. Für die meisten Fälle ist die Verwaltung von Gruppenmitgliedschaften durch Hinzufügen dieser Parameter zum SSO-Payload jedoch nicht der beste Ansatz, da Benutzer sich von Discourse ab- und wieder anmelden müssen, bevor ihre Gruppenmitgliedschaft aktualisiert wird.

Meine Hoffnung ist, dass es in naher Zukunft eine fertige Lösung gibt, um Discourse mit bestimmten WordPress-Mitgliedschaftsplugins zu verknüpfen. Derzeit kann dies nur durch Hinzufügen eines kleinen Stücks benutzerdefinierten Codes zu deiner WordPress-Website erfolgen. Wenn dies nichts ist, was du normalerweise selbst machst, musst du möglicherweise einen Entwickler beauftragen, dir dabei zu helfen.

Danke für die Details. Ich werde sehen, ob ich sie mir merken kann.

Ich stimme zu – ich würde es vorziehen, dass das Hinzufügen/Entfernen von Gruppen dynamisch erfolgt und nicht erst beim Ausloggen und erneuten Einloggen des Benutzers.

Sollte ich es nicht hinbekommen, werde ich hier einen Entwickler beauftragen, es zu erledigen, und den Code teilen. Ich glaube, es gibt ein paar Entwickler im Marktplatz-Bereich, die das bereits gemacht haben.

Ray

Hey Ray, was hast du hier gemacht?