Benutzerdefinierte Authentifizierungsbedingungen

Es gibt mehrere Möglichkeiten, wie ein Benutzer angemeldet werden kann, und es ist schwierig, Bedingungen über ein Plugin hinzuzufügen, die ein Benutzer vor der Anmeldung erfüllen muss.

Einige Beispiele für Bedingungen, die ein Plugin-Autor zur Authentifizierung hinzufügen möchte:

  • Sicherstellen, dass die E-Mail-Domain des Benutzers einem bestimmten Muster entspricht, z. B. university.edu
  • Bestätigung des zweiten Faktors von einem 2FA-Anbieter (es gibt scheinbar einige davon)
  • Sicherstellen, dass der Benutzer ein aktives Abonnement über einen Zahlungsanbieter hat

Aktuelle Bedingungen werden je nach Kontext unterschiedlich geprüft (oder nicht geprüft) (nicht erschöpfende Liste):

  • Session Controller

    • über die create-Methode: korrektes Passwort, Benutzer genehmigt, Benutzer aktiv, E-Mail des Benutzers bestätigt, TOTP-Zweiter-Faktor, Benutzer gesperrt, korrekte/falsche IP-Adresse
    • über die email_login-Methode: TOTP-Zweiter-Faktor, Benutzer genehmigt, Benutzer gesperrt, korrekte/falsche IP-Adresse
  • Users Controller

    • über logon_after_password_reset: Benutzer genehmigt (beachten Sie, dass dies mit einer neuen Guardian-Instanz geprüft wird), Benutzer ist Mitarbeiter
  • Invites Controller

    • über perform_accept_invitation: Benutzer aktiv

Eine Möglichkeit, eine benutzerdefinierte Bedingung einzufügen, besteht darin, ein benutzerdefiniertes Modul voranzustellen, das jede Methode modifiziert. Dies ist jedoch aus Sicht der Kompatibilität mit Discourse nicht wünschenswert und auch recht unübersichtlich.

Vorschlag
Es wäre einfacher, die Authentifizierung zu erweitern, wenn sie weniger stark im gesamten Code verteilt wäre. Alle Bedingungen (und Fehlermeldungen als Reaktion darauf), die man prüfen möchte, könnten als separate Methoden an einer einzigen Stelle definiert werden. Ein Benutzer, der sich anmelden möchte, müsste jede aktivierte Bedingung bestehen. Als Plugin-Autor könnten Sie eigene Methoden zu dieser Klasse hinzufügen, die dann von der log_on_user-Methode geprüft werden. Wenn Sie eine Bedingung in einem bestimmten Kontext überspringen möchten, könnten Sie einen Parameter übergeben, um dies zu ermöglichen.

Dies lässt sich über die Seiteneinstellung „E-Mail-Domains-Whitelist" umsetzen.

4 „Gefällt mir“