Debuggen und Beheben häufiger DiscourseConnect-Probleme

Als Administrator eines Forums, das DiscourseConnect verwendet, erhalten Sie möglicherweise gelegentlich Meldungen von Benutzern, dass sie beim Versuch, sich im Forum anzumelden, eine Fehlermeldung erhalten. Zum Beispiel: „Es liegt ein Problem mit Ihrem Konto vor. Bitte kontaktieren Sie den Administrator der Website."

Aktivieren der ausführlichen DiscourseConnect-Protokollierung

Um das Problem zu debuggen, müssen Sie zunächst die Site-Einstellung „ausführliche DiscourseConnect-Protokollierung" in Discourse aktivieren. Wenn diese Einstellung bereits aktiviert war, können Sie direkt zu den Site-Protokollen unter Admin/Logs/Error Logs gehen. Wenn die Einstellung zuvor nicht aktiviert war, müssen Sie den Benutzer bitten, sich erneut anzumelden, damit Sie einen Protokolleintrag für seinen fehlgeschlagenen Anmeldeversuch generieren können.

Lesen des Protokolleintrags

Gehen Sie zu Admin/Logs/Error Logs und suchen Sie nach einem aktuellen Protokolleintrag, der mit Verbose SSO log: Record was invalid beginnt. Falls Sie Schwierigkeiten haben, den Eintrag zu finden, geben Sie „Record was invalid" in das Suchfeld am unteren Rand der Protokollseite ein. Klicken Sie auf den Protokolleintrag. Klicken Sie dann auf den Reiter „info" in der Protokoll-Symbolleiste:

Die Informationen, die Sie benötigen, sind der Grund (angegeben im Protokolleintrag) sowie die email und external_id (im Abschnitt „info" zu finden).

Beheben von DiscourseConnect-Anmeldeproblemen aufgrund von require_activation

Ein häufiges Problem bei der SSO-Anmeldung lautet: Record was invalid: User {:primary_email=>\"has already been taken\"}.

Dies kann auftreten, wenn der Parameter require_activation im SSO-Payload auf true gesetzt ist und der Benutzer bereits ein bestehendes Konto in Discourse hat, das entweder noch keinen single_sign_on_record besitzt oder einen single_sign_on_record hat, dessen external_id jedoch nicht mit der external_id des Benutzers übereinstimmt, der sich anmelden möchte.

Um dies zu bestätigen, öffnen Sie die Rails-Konsole Ihres Forums und suchen Sie nach einem Benutzer mit der E-Mail-Adresse, die beim fehlgeschlagenen SSO-Anmeldeversuch verwendet wurde:

u = User.find_by_email('sally@example.com')

Überprüfen Sie nun, ob für diesen Benutzer ein single_sign_on_record existiert:

sso_record = u.single_sign_on_record

Wenn der Benutzer auf Ihrem Forum existiert, aber keinen SSO-Eintrag hat, können Sie einen Eintrag mit den Werten aus dem SSO-Protokoll erstellen:

SingleSignOnRecord.create!(user_id: 2, external_id: 2, external_email: 'sally@example.com', last_payload: '')

Der Benutzer sollte sich nun anmelden können.

Wenn bereits ein SSO-Eintrag für den Benutzer existiert, dessen external_id jedoch nicht mit der external_id des fehlgeschlagenen Anmeldeversuchs übereinstimmt, müssen Sie untersuchen, warum dies geschehen ist. Dies kann beispielsweise passieren, wenn ein Benutzerkonto gelöscht und dann auf der Seite des SSO-Anbieters neu erstellt wurde. In diesem Fall können Sie den SSO-Eintrag aktualisieren, um die neue external_id zu verwenden:

sso_record.external_id = <failed-sso-login-record-external_id>
sso_record.save!

Der Benutzer sollte sich nun anmelden können.

Wenn Sie das WP Discourse-Plugin verwenden und auf das oben beschriebene Problem stoßen, finden Sie unter Validate Email Addresses with the WP Discourse plugin weitere Details zur Behebung des Problems, ohne auf die Rails-Konsole zugreifen zu müssen.

17 „Gefällt mir“

I wasn’t sure how to enter the Rails console, but found the answer over here and thought I’d publish for anyone else who doesn’t know how to get into the Rails console.

  1. SSH into your site
  2. Login as root user then do the following:
  3. sudo -s
  4. cd /var/discourse/
  5. ls
  6. ./launcher enter app
  7. rails c

That should get you into the Rails console!

3 „Gefällt mir“

I was doing this and it was not working, but I finally got it to work when I replaced this:

sso_record.external_id = <failed-sso-login-record-external_id>

with this:

sso_record.external_id = 91

Where “91” was the external_id of the user who was unable to login.

Thanks so much for this helpful discussion @simon! :raised_hands:

Yes, <failed-sso-login-record-external_id> is meant to be replaced with the external_id from the log entry.

2 „Gefällt mir“

:man_facepalming: I was trying it with the " < > " and it wasn’t working, of course ツ

Is there an easy way to reset the SSO ties for specific accounts with the Rails console? I have a couple admin accounts that are tied to different WP accounts than I would like because originally the email addresses didn’t match properly. Can I manually set them to be tied to a different WP account?

You can find the user’s WordPress ID by going to their user page from the WordPress dashboard. The user’s ID will be displayed in the address bar of your browser as the value of the user_id query parameter.

Once you have the user’s WordPress ID, you can update their SSO record on Discourse following the steps outlined for updating the external_id at the end of the ‘Solving require_activation SSO login issues’ section of my original post. You need to be careful with this though - especially with admin accounts.

3 „Gefällt mir“

Hallo, wir haben diese Lösungen ausprobiert, aber nichts hat funktioniert… Die externen IDs waren identisch und SSO ist aktiv. Haben Sie eine andere Lösung? Ich bin ratlos :frowning:

Ist das Problem mit der SSO-Anmeldung bei einem bestimmten Benutzer, oder funktioniert SSO auf deiner Seite überhaupt nicht?

nur für einen bestimmten Benutzer

Stelle sicher, dass die Site-Einstellung verbose sso logging aktiviert ist. Falls du das bereits getan hast, kannst du den Fehler in den Logs deiner Site finden, wenn sich ein Benutzer einzuladen versucht? Wenn du den Fehlerlog hier teilen kannst, können wir dir möglicherweise helfen. Falls im Log Daten enthalten sind, die du nicht öffentlich machen möchtest, kannst du sie mir per PN senden.

2 „Gefällt mir“

Hilft dir das weiter? Ist das, was du brauchst?

Hier sind die Details zum Log des betroffenen Mitglieds (oder zumindest des einzigen, der dieses Problem gemeldet hat).

Vielen Dank!

1 „Gefällt mir“

Danke, das hilft. Es sieht so aus, als ob Ihre SSO-Anbieterseite eine WordPress-Seite ist. Verwenden Sie das WP Discourse-Plugin für SSO? Wenn ja und Sie die neueste Version des Plugins verwenden, gehen Sie zur Profilseite des Benutzers und aktivieren Sie das Kontrollkästchen „E-Mail-Adresse verifiziert“. Klicken Sie dann unbedingt auf die Schaltfläche Speichern. Lassen Sie den Benutzer danach erneut versuchen, sich anzumelden.

Wenn Sie das WP Discourse-Plugin nicht verwenden, müssen wir Ihnen detailliertere Anweisungen geben, um das Problem zu beheben.

4 „Gefällt mir“

Du hast recht, ich verwende WordPress und habe die Änderung vorgenommen. Ich werde den Benutzer bitten, es erneut zu versuchen. Vielen Dank!! :smiley:

1 „Gefällt mir“

Es hat funktioniert! Ja! :smile: Danke!

5 „Gefällt mir“