Discourse-Authentifizierungsvalidierungen

|||
-|-|-|
:discourse2: | Zusammenfassung | Discourse Authentication Validations ermöglicht das Hinzufügen benutzerdefinierter Validierungen zu einem Benutzerfeld, um die Anzeige von Benutzerfeldern im Anmelde-Modal umzuschalten.
:hammer_und_werkzeug: | Repository-Link | https://github.com/discourse/discourse-authentication-validations
:offenes_buch: | Installationsanleitung | So installieren Sie Plugins in Discourse

:informationsquelle: Über

Discourse Authentication Validations fügt die Möglichkeit hinzu, benutzerdefinierte Validierungen zu einem Benutzerfeld hinzuzufügen.

Benutzerdefinierte Benutzerfelder haben keine Art von Validierung, die von der Kernfunktionalität bereitgestellt wird, abgesehen von der Erkennung eines leeren Werts in einem erforderlichen Feld. Dieses Plugin fügt die Möglichkeit hinzu, pro Benutzerfeld einen Regex zu definieren, der dann gegen den eingegebenen Wert geprüft wird.

Zusätzlich fügt dieses Plugin die Möglichkeit hinzu, die Anzeige von Benutzerfeldern im Anmelde-Modal umzuschalten. Dies ermöglicht es Ihnen, Benutzerfelder miteinander zu "verketten", sodass ein Benutzerfeld nur angezeigt wird, wenn ein vorheriges Benutzerfeld einen bestimmten Wert hat.

:baustelle: Grundlegende Einrichtung

1. Plugin aktivieren

Das Plugin Discourse Authentication Validations kann entweder über den Schalter oder über seine Einstellungen aktiviert werden, beides ist auf Ihrer Seite admin/plugins zugänglich.

2. Eine benutzerdefinierte Validierung zu einem Benutzerfeld hinzufügen

Nachdem das Plugin Discourse Authentication Validations aktiviert wurde, sehen Sie unten im Formular für Ihr Benutzerfeld ein Kontrollkästchen \u003ckbd\u003eBenutzerdefinierte Validierungen einschließen\u003c/kbd\u003e.

Wenn es aktiviert ist, werden drei zusätzliche Felder angezeigt:

  1. Wertvalidierungs-Regex
  2. Werte anzeigen
  3. Zielfelder für Benutzer

:geschlossener_schloss_mit_schluessel: Hinzufügen einer benutzerdefinierten Validierung

Geben Sie einen gültigen Regex in das Feld Wertvalidierungs-Regex ein:

\u003cimg width="729" alt="Screenshot 2024-06-05 at 11 18 20 PM" src="upload://sf3eZUtDLXlzXP9vw3HqCAmoZbQ.png"\u003e

Der Wert des Benutzerfelds im Anmeldeformular wird nun gegen den von Ihnen eingegebenen Regex getestet. Wenn die Eingabe nicht den Standards Ihres benutzerdefinierten Regex entspricht, wird das Anmeldeformular nicht gesendet.

\u003ckleine\u003eKein Wert (verlässt sich auf die Standardformularvalidierung)\u003c/kleine\u003e
\u003cimg width="291" alt="Screenshot 2024-06-05 at 11 07 04 PM" src="upload://xQTYDASgAsmIE0nTlO0vGh5CFL3.png"\u003e

\u003ckleine\u003eFalscher Wert\u003c/kleine\u003e
\u003cimg width="282" alt="Screenshot 2024-06-05 at 11 07 40 PM" src="upload://yomkBUMLdjFPjdHFTJCpchPV1jq.png"\u003e

\u003ckleine\u003eRichtiger Wert\u003c/kleine\u003e
\u003cimg width="293" alt="Screenshot 2024-06-05 at 11 08 02 PM" src="upload://jv23nMcMYIaAI4B4MJAcZUlF6V1.png"\u003e

:link: Verketten von Benutzerfeldern

Fügen Sie zuerst einen Wert für Werte anzeigen zu einem Benutzerfeld hinzu.

Wenn ein Benutzerfeld einen Wert für Werte anzeigen enthält, beobachtet es den Wert der angehängten Eingabe, bis der Eingabewert mit irgendeinem der Werte anzeigen übereinstimmt. Es schaltet dann die Sichtbarkeit aller enthaltenen Zielfelder für Benutzer um und macht sie sichtbar.

Zweitens fügen Sie einen Wert für Zielfelder für Benutzer hinzu.

Im Dropdown-Menü Zielfelder für Benutzer sehen Sie eine Liste aller verfügbaren Benutzerfelder. Jedes von Ihnen ausgewählte Benutzerfeld wird seine Sichtbarkeit durch entsprechende Werte in Werte anzeigen umgeschaltet.

:hammer_und_werkzeug: Erweitertes Verketten

Sie können Benutzerfelder miteinander verketten, indem Sie benutzerdefinierte Validierungen zu mehreren Benutzerfeldern hinzufügen.

Nehmen wir zum Beispiel an, wir haben drei Benutzerfelder mit den angegebenen Werten:

Name Hat benutzerdefinierte Validierung Werte anzeigen Zielfelder für Benutzer
Eingabe Eins true zeige-feld-zwei Eingabe Zwei
Eingabe Zwei true zeige-feld-drei Eingabe Drei
Eingabe Drei false

Eingabe Zwei und Drei werden standardmäßig ausgeblendet, da sie "Kinder" von Eingabe Eins sind. Wenn der Anzeigewert von zeige-feld-zwei zu Eingabe Eins hinzugefügt wird, wird Eingabe Zwei angezeigt, aber Eingabe Drei bleibt weiterhin ausgeblendet. Sie bleibt ausgeblendet, bis Eingabe Zwei den Wert zeige-feld-drei hat.

Mit der richtigen Kombination aus Anzeigewerten und Zielklassen können Sie Benutzerfelder unendlich untereinander verschachteln.

18 „Gefällt mir“

Hallo @isaac.

Ich liebe dieses Plugin, es ist genau das, was ich brauche! Wird es noch gepflegt? Ich habe Probleme mit der „Chaining“-Funktionalität.

Ich habe das obige Beispiel befolgt und Folgendes verwendet:

Aber es werden standardmäßig alle Felder angezeigt… Ich entschuldige mich, falls ich etwas in der Beschreibung übersehen habe!

1 „Gefällt mir“

Entschuldigen Sie bitte – das Plugin funktioniert. Es funktioniert jedoch nicht, wenn Sie über einen „Einladungs“-Registrierungslink aufrufen. Es funktioniert, wenn Sie eine öffentliche Registrierungsseite verwenden.

Es wäre eine schöne Funktion, wenn die Logik sowohl für Einladungen als auch für öffentliche Anmeldungen funktionieren würde!

Tolle Arbeit mit dem Plugin!

5 „Gefällt mir“

Ich stimme vollkommen zu. @tobiaseigen, wenn wir dieses Plugin als Funktion breiter übernehmen würden, möchten wir, dass die Logik sowohl dort (öffentlich/Einladung) funktioniert, wie @kravitsjacob bereits angemerkt hat.

2 „Gefällt mir“

Hallo @isaac. Nochmals vielen Dank für dieses tolle Plugin – es hat mir wirklich so viele Diskussionsmöglichkeiten eröffnet.

Ich bin auf einen kleinen Fehler gestoßen – mir ist aufgefallen, dass Fragenantworten gespeichert werden, auch wenn eine Frage ausgeblendet ist. Dies hat zu einigen unbeabsichtigten Situationen geführt, in denen Benutzer Antworten eingereicht haben, die eigentlich nicht möglich sein sollten (deshalb wollten wir die Fragen ja ursprünglich ausblenden). Dieses Verhalten führt auch zu einer weiteren Situation, in der eine Frage, wenn sie doppelt verschachtelt ist, immer noch angezeigt wird, obwohl die übergeordnete Antwort abgewählt wurde (da sie immer noch denkt, dass die auslösende Antwort ausgewählt ist). Ich weiß, dass diese Beschreibung etwas vage ist, daher hier ein GIF, das dieses Verhalten hervorhebt:

auth null bug

Ich denke, meine gewünschte Korrektur wäre, die Antworten auf den Nullwert zurückzusetzen, sobald sie nicht mehr sichtbar sind. Dies könnte auch ein „Opt-in“-Verhalten sein, das von der Person, die das Formular einrichtet, konfiguriert werden kann – ich kann mir verschiedene Philosophien vorstellen, ob Antworten beim Durchlaufen dieser Bäume bestehen bleiben sollten.

Könntest du das implementieren? :pray:

5 „Gefällt mir“

Vielen Dank für die ausführliche Antwort! Ich werde mir das nächste Woche ansehen :slight_smile:

3 „Gefällt mir“

Ich hatte heute die Gelegenheit, mir diese Probleme anzusehen :slight_smile:

Bitte lesen Sie die PR-Beschreibung für Details!

3 „Gefällt mir“

Es ist derzeit nicht möglich, ein optionales Pflichtfeld zu haben.

Ich habe ein Feld „Branche“ und wann immer „Andere“ ausgewählt wird, wird das Feld „Andere Branche“ eingeblendet.

Aber wenn ich das Feld „Andere Branche“ zu einem Pflichtfeld mache, kann ich das Formular nicht absenden, wenn dieses Feld ausgeblendet ist.

Wenn ich das div manuell einblende, können Sie sehen, dass diese Eingabe erforderlich ist, obwohl das Formular ausgeblendet ist.

Wenn ich „Andere“ auswähle, einen Wert eingebe und dann eine andere Branche auswähle, sodass die Eingabe wieder ausgeblendet wird, kann ich das Formular absenden. Und dann passiert auch die gleiche Situation, wie @kravitsjacob darauf hingewiesen hat: Der Wert des Feldes „Andere Branche“ wird im Benutzerprofil gespeichert, obwohl „Branche“ nicht auf „Andere“ gesetzt ist.

Benutzeradministrator:

3 „Gefällt mir“

Hallo @RGJ, konnten Sie das Problem mit den Pflichtfeldern lösen? Ich habe das gleiche Problem.
@isaac gibt es dafür eine Übergangslösung? Ich habe Felder, die erforderlich sein sollten, während die Bedingung für ihre Sichtbarkeit erfüllt ist.

Nein, ich habe noch keine Rückmeldung dazu erhalten, noch habe ich selbst Zeit dafür aufgewendet.

@RGJ , vielen Dank für die schnelle Antwort.
Ich habe gerade einen PR im ursprünglichen Repository mit einer Korrektur erstellt, die das Problem lösen sollte.
Die größte Herausforderung bestand darin, dass die Validierung an zwei Stellen ausgeführt wird, nämlich im Frontend und im Backend. Daher musste ich für jede eine separate Lösung implementieren und sicherstellen, dass sie wie erwartet funktionieren.
Ich hoffe, das hilft jemandem in der Zukunft.

1 „Gefällt mir“

Ich habe eine zusätzliche PR hinzugefügt, die eine bedingte Feldlogik pro Feldwert anstelle eines Wertes pro Feld hinzufügt. Das bedeutet, dass Sie verschiedene Felder abhängig von verschiedenen Werten des Feldes, das Sie haben, ein- oder ausblenden können.

Es wird auch eine Vorschau angezeigt, wie es in der Datenbank für die neue Spalte, die JSONB speichert, gespeichert wird.

Selection_081

1 „Gefällt mir“

Wie wirkt sich das auf durchsuchbare Felder aus?
Ein benutzerdefiniertes Feld, das auf durchsuchbar eingestellt wurde, wird im Konfigurationsmenü im Benutzerverzeichnis meiner Website nicht angezeigt, stattdessen werden die 3 bedingten Felder angezeigt, die damit verknüpft sind. Diese drei Felder sind selbst nicht als durchsuchbar gekennzeichnet.

Hallo
Entschuldigung, ich bin mit der Discourse-Logik bezüglich benutzerdefinierter Benutzerfelder noch nicht vertraut und bin mir daher nicht sicher, ob ich diese Frage richtig verstanden habe.

Soweit ich weiß, markiert „Searchable“ (Durchsuchbar) das Feld zur Indizierung und kann in anderen Teilen des Portals verwendet werden, womit ich noch nicht gearbeitet habe und nicht sicher bin, wie ich dies richtig konfiguriere.

Theoretisch sollten sich bedingte Felder in keiner Weise auf durchsuchbare Felder auswirken, und bei der Verwendung von Autocomplete zum Einfügen eines Wertes sollte die Logik immer noch funktionieren, da Sie dem UserField-Element einen Wert zuweisen.

Vielleicht können Sie mehr Details zu Ihrer Frage hinzufügen, vielleicht ein paar Screenshots beifügen, das könnte helfen.

Ich war vielleicht nicht deutlich, meine Frage galt dem OP und dem Plugin im Allgemeinen. Entschuldigung, falls das für Verwirrung gesorgt hat.

Der Rest der Logik funktioniert ordnungsgemäß für das Plugin, aber ich habe 3 Felder, die nur basierend auf dem oberen Feld im ersten Screenshot unten angezeigt werden. Dann werden im Benutzerverzeichnis nur die 3 abhängigen Felder angezeigt, nicht das ursprüngliche Feld, das als durchsuchbar gekennzeichnet ist:

Screenshots

image
image