E-Mail-Verifizierung für SSO deaktivieren

Hey,

ich habe Discourse so konfiguriert, dass es Auth0 als SSO-Anbieter verwendet. Das Problem ist, dass ein Benutzer bei der Registrierung zwei Verifizierungs-E-Mails erhält: eine von Auth0 und eine von Discourse.

Gibt es eine Möglichkeit, die von Discourse zu deaktivieren?

Vielen Dank im Voraus

Wenn E-Mail-Adressen über Auth0 verifiziert werden, können Sie die Verifizierungs-E-Mails von Discourse deaktivieren, indem Sie die Site-Einstellung oauth2 email verified auswählen. In diesem Beitrag finden Sie einen Hinweis auf diese Einstellung: Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin - #33 by blake.

Danke für die Antwort @simon, aber ich verwende SSO und nicht OAuth2.

Der Begriff SSO wird für verschiedene Authentifizierungsmethoden verwendet. Dies hat in der Vergangenheit bereits zu Verwirrung geführt.

Wenn Sie die Discourse-Implementierung von SSO verwenden, wird die E-Mail-Bestätigung über den SSO-Parameter require_activation gesteuert. Setzen Sie diesen Parameter auf "false", um die E-Mail-Bestätigung zu umgehen.

Nochmals vielen Dank @simon

Ich möchte es nicht komplett deaktivieren. Momentan ist es so eingerichtet, dass require_activation je nachdem, ob die Benutzer über Auth0 verifiziert wurden, true oder false zurückgibt. Das funktioniert einwandfrei: Nachdem sie auf die Auth0-E-Mail geklickt haben, werden sie beim nächsten Einloggen in Discourse verifiziert.

Im Idealfall würde es also einfach ausreichen, die E-Mail zu unterdrücken, es sei denn, ich übersehe etwas.

Das ergibt Sinn. Unser WordPress-Plugin verarbeitet die E-Mail-Verifizierung auf die gleiche Weise.

Wenn du sehen möchtest, wie der Wert require_activation von Discourse verwendet wird, wirf einen Blick in diese Datei: https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L81. Du wirst sehen, dass bei require_activation mit dem Wert "false" beim Erstellen eines Benutzers über SSO ein aktiver Benutzer in Discourse angelegt wird. Ist der Wert auf "true" gesetzt, wird der Benutzer erst aktiviert, wenn er auf den Link in der Discourse-Aktivierungs-E-Mail klickt.

Sobald ein Benutzer in Discourse als active markiert ist, sollte nur noch die Aktivierung eines Benutzers erforderlich sein, wenn du die Site-Einstellung sso_overrides_email aktiviert hast und der Benutzer seine E-Mail-Adresse auf deiner SSO-Provider-Seite aktualisiert.

Wenn require_activation auf "true" gesetzt ist, verhindert dies auch, dass Discourse vorhandene Benutzer basierend auf ihrer E-Mail-Adresse mit Benutzern von deiner externen Seite abgleicht. Dies kann zu Problemen führen, wenn SSO implementiert wird, nachdem Benutzer bereits mit einem Konto per Benutzername/Passwort auf der Seite erstellt wurden.

Danke, das ergibt Sinn. Ich bin mir jedoch nicht sicher, wie das verhindert, dass die „E-Mail verifizieren“-Nachricht von Discourse gesendet wird.

Ich möchte nur, dass die von Auth0 gesendet wird.

Damit die Bestätigungs-E-Mail ausschließlich von Ihrer SSO-Anbieterseite gesendet wird, müssen sich Benutzer auf dieser Seite registrieren und ihre E-Mail-Adresse vor ihrem ersten Login bei Discourse verifizieren. Anschließend können Sie den Parameter require_activation für diese Benutzer auf "false" setzen. Sie werden als aktive Benutzer in Discourse erstellt und erhalten keine Discourse-Aktivierungs-E-Mail.

Das ergibt keinen Sinn. Wie kann ich erreichen, dass Benutzer ihre E-Mail-Adresse verifizieren, bevor sie sich das erste Mal bei Discourse anmelden?
Meine Website übernimmt bereits die E-Mail-Verifizierung. Wie kann ich verhindern, dass Discourse eine Verifizierungs-E-Mail sendet, aber dennoch eine Meldung anzeigen, dass der Benutzer sich authentifizieren muss?

DiscourseConnect geht davon aus, dass Sie E-Mail-Adressen auf Ihrer Website validieren. Solange Sie dies tun, setzen Sie den Parameter require_activation nicht im SSO-Payload. Wenn dieser Parameter nicht im Payload enthalten ist, werden die Benutzer in Discourse eingeloggt, ohne dass eine Aktivierungs-E-Mail an sie gesendet wird.

Ja, aber dann geht Discourse davon aus, dass sie validiert sind, was möglicherweise nicht der Fall ist, wenn der Nutzer das Forum besucht und die E-Mail-Validierung vergessen oder beschlossen hat, sie nicht durchzuführen. Wenn die Website require_validation auf true setzt, bedeutet das, dass der Nutzer seine E-Mail auf der Website noch nicht validiert hat, aber definitiv einen Validierungslink erhalten hat. Daher muss Discourse keine weitere Validierungs-E-Mail senden, tut es jedoch aufgrund dieses Parameters.

Das Problem tritt im Grunde nur auf, wenn der Nutzer Discourse vor der Validierung besucht. Daher habe ich derzeit im Wesentlichen die Wahl zwischen zwei Optionen:

  1. Der Nutzer erhält nur eine Validierungs-E-Mail, wird aber von Discourse als validiert behandelt. Das ist nicht ideal, da er die Validierung möglicherweise nicht abschließt.
  2. Der Nutzer erhält zwei Validierungs-E-Mails, wird aber sowohl vom Forum als auch von der Website ordnungsgemäß validiert. Diese Option ist ebenfalls nicht ideal, aber definitiv besser als die andere.

Es gibt eine dritte Option: Einen Schalter hinzufügen, der nur aktiv ist, wenn SSO aktiviert ist, um die Versendung von Validierungs-E-Mails durch Discourse zu deaktivieren (jedoch mit einer Fehlerseite, die dem Nutzer mitteilt, dass er nicht verifiziert ist).

Im Idealfall verifizieren Sie die E-Mail-Adresse eines Nutzers, sobald dieser ein Konto auf Ihrer Website erstellt, indem Sie ihn auf eine Aktivierungs-E-Mail antworten lassen, die von Ihrer Website gesendet wird, sobald sich der Nutzer registriert. Falls Sie Nutzern aus irgendeinem Grund erlauben, Konten auf Ihrer Website zu erstellen, bevor sie ihre E-Mail-Adresse verifiziert haben, können Sie den Parameter require_validation bedingt im SSO-Payload setzen. Wenn der Nutzer seine E-Mail-Adresse verifiziert hat, setzen Sie require_validation auf false oder lassen Sie den Parameter einfach im Payload weg. Wenn der Nutzer seine E-Mail-Adresse auf Ihrer Website noch nicht verifiziert hat, setzen Sie den Parameter require_activation auf true, damit sie eine Aktivierungs-E-Mail von Discourse erhalten.

Das ist genau das, was ich tue, und das ist ein Problem. Zum Beispiel: Ein Benutzer registriert sich und erhält eine Aktivierungs-E-Mail von der Website. Anstatt sie zu öffnen und zu aktivieren, entscheidet er sich stattdessen, zu Discourse zu gehen – warum auch immer. Dann wird require_activation auf true gesetzt, weil der Benutzer noch nicht aktiviert wurde. Discourse wird jedoch entscheiden, dass der Benutzer eine weitere Aktivierungs-E-Mail benötigt, was ein Problem darstellt, da bereits eine Aktivierungs-E-Mail von der Website wartet, um geöffnet zu werden. Discourse sollte stattdessen einfach eine Fehlermeldung anzeigen, die besagt, dass der Benutzer seine E-Mails überprüfen sollte.