Discourse-Mitglieder werden ausgeloggt – wie kann man das beheben?

Hallo, ich habe gehört, dass mehrere meiner Forum-Mitglieder automatisch nach 20–30 Minuten abgemeldet werden.

Ich verwende SSO, daher frage ich mich, ob das Problem damit zusammenhängen könnte, dass sie sich auf der Hauptseite anmelden, dann zu Discourse wechseln (was dort eine neue Sitzung startet?), wieder zur Hauptseite zurückkehren (wodurch Discourse inaktiv wird) und schließlich erneut zu Discourse wechseln und auf mysteriöse Weise abgemeldet werden.

(Das ergibt jedoch nicht ganz Sinn, denn jedes Mal, wenn sie Discourse betreten, sollte die „Inaktivitätszeit

[quote=“pnoeric, Beitrag:1, Thema:152514”]
„Maximum session age

Das ist in Ordnung und völlig akzeptabel… nach 1 Stunde Inaktivität sollten sie ausgeloggt werden.

Das Problem ist, dass ich Berichte bekomme, wonach Leute nach 20–30 Minuten ausgeloggt werden.

Gibt es eine Einstellung für diese 1-Stunden-Leerlaufzeitüberschreitung? Wie ich in meinem ursprünglichen Beitrag erwähnt habe, kann ich sie nicht finden… und das scheint doch der erste Ort zu sein, an dem man suchen sollte, oder?

Nur um die offensichtlichste Ursache auszuschließen… ist es möglich, dass die Menschen sich über die genaue Zeit irren? 30 Minuten und eine Stunde sind nicht so unterschiedlich :wink:

Um das Debuggen fortzusetzen, schlage ich vor, als nächsten Schritt die Daten in den Tabellen user_auth_tokens und user_auth_token_logs zu prüfen. Sie enthalten alle Informationen über Sitzungstokens und Ablaufzeiten.

Ja, das ist die, die du im Eröffnungsbeitrag erwähnt hast.

[quote=“pnoeric, Beitrag:1, Thema:152514”]
meine Discourse-Einstellungen, bei denen ich die „maximale Sitzungsdauer

Zustimmung :wink: Ich teste es gerade – melde mich auf meiner Seite an, gehe zu den Foren und lasse den Browser einfach in Ruhe!

Danke für die Tipps zu den DB-Tabellen, ich werde das weiter untersuchen.

Hmm. Wenn Nutzer die Foren besuchen und Themen lesen usw. und dabei eine Aktion auslösen (z. B. create_post, create_topic, edit_post), erhalte ich über den Webhook eine Nachricht. Diese informiert die Hauptseite, dass der Nutzer noch aktiv ist, sodass ich den Wert „Letzter Klick

Jeder Profil-Endpunkt verfügt über einen Wert last_seen, den Sie verwenden könnten.

Ich glaube nicht, dass ich eine solche Einrichtung in SSO-Protokollen gesehen habe, und wir hatten auch keine Anfragen nach solchen Funktionen. Häufiger halten die beiden Systeme ihre Unabhängigkeit.

Wenn Sie wirklich einen Webhook für „Benutzer gesehen“ erstellen möchten, könnten Sie dies möglicherweise über ein benutzerdefiniertes Plugin umsetzen.

Ich bin mir nicht sicher, was du mit der Unabhängigkeit der beiden Systeme meinst? Lass mich bitte wissen, falls mir eine offensichtliche Lösung für das von mir geschilderte Problem entgangen ist!

Andernfalls scheinen meine Optionen folgende zu sein:

  1. Wenn ein Benutzer auf der Hauptseite aus der Zeit läuft, rufe ich vor dem Abmelden Discourse auf und prüfe den Wert „last_seen“, um festzustellen, ob das Mitglied tatsächlich in den Foren aktiv war (nur nichts, was einen Webhook-Aufruf auslöst). Vorteile: einfach umzusetzen. Nachteile: erzeugt viele API-Aufrufe, was bereits ein Problem für mich ist und zu Umwegen bei der Einhaltung der Ratenbegrenzungen führt.

  2. Erstelle mein eigenes Plugin, das von Zeit zu Zeit meine Hauptseite anpingt, damit ich die letzte Aktivitätszeit des Benutzers auf meiner Hauptseite aktualisieren kann. Vorteile: fühlt sich eher nach der „richtigen“ Lösung an (Aktivität durch eine Push-Nachricht anzeigen); etwas elegant. Nachteile: nicht einfach zu implementieren.

  3. Die Abmeldezeit auf meiner Hauptseite auf 2 Stunden ändern. Vorteile: einfach umzusetzen. Nachteile: gibt es welche?

  4. Sich keine Sorgen machen. Benutzer werden mitten in ihrer Discourse-Sitzung abgemeldet und beschweren sich heftig. Das ist mein aktueller Zustand. :wink: Vorteile: einfach umzusetzen, lol. Nachteile: eine sehr schlechte Benutzererfahrung.

Habe ich etwas übersehen?

Es scheint, als wäre #3 eine gute Lösung, obwohl ich die Auswirkungen einer längeren Abmeldezeit auf der Hauptseite noch durchdenken muss.

Ich favorisiere nach wie vor #1 als beste Wahl, aber dann muss ich herausfinden, wie ich so viele verdammt Ratenbegrenzungsprobleme vermeiden kann. Ich wünschte, es gäbe eine Möglichkeit, alle Ratenbegrenzungen in Discourse (und in nginx, da ich die Discourse-Docker-Installation verwende) global und dauerhaft abzuschalten. Ich brauche keine davon. Es spricht nur meine Hauptseite mit meiner Discourse-Instanz. Ich erlaube keine API-Schlüssel für Benutzer, und ich bin der Einzige mit einem System-API-Schlüssel. Es ist ein vollständig geschlossenes System, und Ratenbegrenzungen tun nichts anderes, als mir ständig im Weg zu stehen. Ich schätze, das ist ein anderes Thema.

Wenn Sie das von Ihnen beschriebene Verhalten beibehalten müssen, dann ja, ich denke, das sind die vier Optionen. Wenn Sie das Verhalten jedoch etwas anpassen, wird es besser mit den verfügbaren Tools funktionieren.

Das Ungewöhnliche an Ihrer Einrichtung ist:

Sie beenden die Discourse-Sitzung immer dann, wenn die Sitzung auf Ihrer Hauptseite abläuft. Wenn Sie diesen Teil entfernen, denke ich, wird die Einrichtung typischen Setups entsprechen.

Sie könnten weiterhin /logout aufrufen, wenn sich ein Benutzer explizit von Ihrer Hauptseite abmeldet. Rufen Sie es einfach nicht auf, wenn die Sitzung auf natürliche Weise abläuft.

Aus dem Eröffnungspost lässt sich nicht ableiten, ob ihr eine hochspezialisierte Seite betreibt, auf der Nutzer extrem sensible Informationen teilen, oder ob die meisten Benutzer sich von gemeinsam genutzten öffentlichen Computern anmelden oder ähnlichem.

Mit Abstand die einfachste Lösung scheint hier zu sein, die Ablaufzeit von Benutzersitzungen nicht übermäßig aggressiv zu gestalten und Benutzer nicht ständig abzumelden. Meine Präferenz als Nutzer ist immer: „Meldet mich niemals ab, es sei denn, ich klicke ausdrücklich auf ‚Abmelden’.

Ich verstehe – das ist eine gute Lösung; ich denke, dass genug meiner Mitglieder das Kontrollkästchen „Angemeldet bleiben" auf der Anmeldeseite nutzen, sodass es nahtlos wäre, sie zur Hauptseite zurückzubringen. Wenn ihre Sitzung auf der Hauptseite abgelaufen ist, würden sie in diesem Moment (unsichtbar) wieder angemeldet werden. Hmm.

Es ist eine Seite für einen Bevölkerungssegment, das sehr sensibel bezüglich Datenschutz ist. Aber ich verstehe, was ihr sagt, und ich denke, ich könnte einfach so vorgehen, wie ihr (und David) vorschlagt.

Vielen Dank an euch beide. Ich hatte kein gutes Gefühl für das „große Ganze" hier oder dafür, wie andere Seiten mit solchen Szenarien umgehen… jetzt habe ich es :slight_smile: und ich sehe einige mögliche Lösungen für meine Situation. Sehr geschätzt!