Dieser Leitfaden erklärt, wie du benutzerdefinierte Benutzerfelder in Discourse erstellst und konfigurierst, einschließlich der Hinzufügung zu den Anmeldeformularen, Benutzerprofilen und dem Benutzerverzeichnis.
Erforderliche Benutzerebene: Administrator
Benutzerdefinierte Benutzerfelder ermöglichen es dir, zusätzliche Informationen von deinen Benutzern zu sammeln, die über die Standardprofilfelder hinausgehen. Diese Felder können auf Benutzerkarten, Benutzerübersichtsseiten und sogar über das Data-Explorer-Plugin abgerufen werden. Dieser Leitfaden führt dich durch den Prozess der Erstellung und Konfiguration benutzerdefinierter Benutzerfelder.
Hinzufügen eines Benutzerfelds
Gehe zu Admin > Community > User Fields (discourse.example.com/admin/config/user-fields).
Falls du noch keine Benutzerfelder erstellt hast, siehst du diesen Bildschirm:
Füge wichtige Links hinzu, die Benutzer bestätigen müssen, z. B. per HTML: Ich stimme zu, <a href="https://meta.discourse.org/guidelines">die Community-Richtlinien</a> zu lesen und einzuhalten.
Optional - Optionale Felder können von Benutzern leer gelassen werden
Für alle Benutzer - Wenn ein Feld von allen Benutzern erforderlich ist, müssen alle Konten, einschließlich angemeldeter Benutzer, es ausfüllen. Dies ist sehr nützlich für Fälle wie die Anforderung der Nutzungsbedingungen (ToS).
Bei der Anmeldung - Alle neuen Konten müssen das Feld ausfüllen.
Zusätzlich findest du am unteren Rand des Erstellungsfelds diese Präferenz-Checkboxen:
Nach der Anmeldung bearbeitbar: Erlaubt Benutzern, das Feld von ihrer Profilseite aus zu aktualisieren
Auf öffentlichem Profil anzeigen: Zeigt den Feldwert auf der Benutzerübersichtsseite an
Auf Benutzerkarte anzeigen: Zeigt den Feldwert auf der Benutzerkarte an
Durchsuchbar: Ermöglicht die Suche nach Benutzern basierend auf dem Wert dieses Felds im Benutzerverzeichnis
Im Anmeldeformular anzeigen: Steuert, ob das Feld im Anmeldeformular angezeigt wird. Dies wird automatisch aktiviert (und kann nicht deaktiviert werden), wenn die Feldanforderung „Für alle Benutzer“ oder „Bei der Anmeldung“ ist, oder wenn das Feld nach der Anmeldung nicht bearbeitet werden kann.
Auf öffentlichem Profil anzeigen
Wenn aktiviert, wird der Feldwert auf der Profilseite des Benutzers angezeigt:
Hmm. Das ist interessant. Ich glaube, es gibt eine Lösung für das Problem Missing images at Meta.discourse.org, also wird es hoffentlich dadurch behoben.
Gibt es eine Einstellung, die ich ändern muss, um die maximale Länge eines benutzerdefinierten Benutzerfelds anzugeben? Im Moment kann ich in diesem Feld „Test“, das ich als Testbenutzerfeld erstellt habe, keine einzige Zeichen in meinem Benutzerprofil eingeben (nicht einmal „Test“, wie gezeigt).
Da URLs Text sind, funktioniert das Textfeld technisch gesehen, @Vaping_Community. Allerdings könntest du nach zusätzlichen Details wie der Wertvalidierung oder Ähnlichem fragen.
Du könntest ein #contribute:feature-Thema mit deiner Idee erstellen oder danach suchen.
Beachten Sie, dass Sie HTML-Syntax verwenden müssen, wenn Sie einen Link in benutzerdefinierte Benutzerfelder einbetten möchten! <a> href="url">Linktext</a>
Um beispielsweise Community-Richtlinien / -Regeln anzuerkennen:
Kann ich einen benutzerdefinierten Anspruch aus meinem Auth0 SSO mit einem benutzerdefinierten Feld verknüpfen? Derzeit gibt der Benutzer Feldinformationen in Auth0 ein und muss sie dann beim Registrieren ein zweites Mal eingeben. Ich möchte, dass der Wert nach Möglichkeit übernommen wird.
Gibt es eine Möglichkeit, den Feldnamen in der DB zu überprüfen? Wir haben zum Beispiel ein Feld für den Vornamen. Ich habe custom.firstname, custom.first_name und custom.firstName ausprobiert, aber keines davon führte dazu, dass die Felder auf dem Anmeldebildschirm ausgefüllt wurden.
Ich habe die Fehlerprotokolle überprüft, um zu bestätigen, dass die Token-Felder wie oben gezeigt eingehen.
Die Syntax muss custom.user_field_x lauten, wobei x die numerische Feld-ID ist, die unter /admin/config/user-fields/{x}/edit angezeigt wird.
Diese Zuordnungsfunktion ist im Auth0-Plugin nicht direkt verfügbar.
Dennoch gibt es noch Möglichkeiten, das von Ihnen beschriebene zu erreichen:
Erstellen einer Theme-Komponente. Sie können ein kleines Frontend-Skript hinzufügen, das ein benutzerdefiniertes Discourse-Feld automatisch mit einem bereits in Auth0 gespeicherten Wert synchronisiert. Wenn sich ein Benutzer beispielsweise anmeldet und das Feld leer ist, kann das Skript einen sicheren Endpunkt (eine kleine Cloud-Funktion) aufrufen, der den Feldwert von Auth0 abruft und das Discourse-Profil über die API aktualisiert.
Verwendung von Automatisierungstools. Sie könnten auch externe Automatisierungsdienste wie Zapier oder Make verwenden, um diese Synchronisierung außerhalb von Discourse durchzuführen. Der Vorteil ist, dass Sie keinen Code schreiben/pflegen müssen, sondern nur für den Drittanbieterdienst bezahlen.
Benutzerdefinierte Entwicklung. Wir können das Auth0-Plugin selbst erweitern, um benutzerdefinierte Claims nativ in Benutzerfelder bei der Anmeldung zu integrieren, oder ein benutzerdefiniertes Plugin erstellen, das mit dem Auth0-Plugin zusammenarbeitet.
Ein klarer Nachteil des Theme-Komponenten-Ansatzes ist, dass Sie benutzerdefinierten Code selbst schreiben und pflegen müssten, während Sie gleichzeitig auf Sicherheit achten müssten, um potenzielle Fehler oder Schwachstellen zu vermeiden. Ehrlich gesagt, würde ich diese Lösung für eine Produktionsseite wie Ihre nicht empfehlen.
Wenn ich in Ihrer Position wäre, würde ich mich eher für die zweite Option entscheiden, Drittanbieter-Tools zu verwenden, oder eine Funktionsanfrage oder eine Anfrage für benutzerdefinierte Arbeiten (abhängig von der Bewertung unserer Projektmanager) in Erwägung ziehen, um das Auth0-Plugin selbst zu verbessern.
Wenn Sie daran interessiert sind, die letzte Option zu erkunden, können wir die Diskussion privat fortsetzen.
Ich frage mich, ob es eine weniger umständliche Möglichkeit gibt, eine lange Liste von Benutzerfeldern neu anzuordnen, als jedes Mal auf die kleinen Pfeile zu klicken, um sie einzeln nach oben oder unten zu verschieben…?
In der Übersicht der Benutzerfeldliste kann ich nicht erkennen, wie Felder unterschieden werden können, die bei der Registrierung vorhanden und obligatorisch sind (z. B. Je suis… Pays) und solche, die im Registrierungsformular vorhanden, aber optional sind (Mes attentes). Übersehe ich etwas oder ist das eine Nachlässigkeit? Es ist ziemlich umständlich, das Feld bearbeiten zu müssen, um zu sehen, ob es optional ist oder nicht. (Ich bin mir nicht sicher, ob dies der richtige Ort dafür ist, wusste nicht, wo ich es platzieren sollte.)
Vielleicht kann die JSON, die die Daten liefert, ein wenig helfen. Sie ist nicht schön, aber Sie können sich /admin/config/user-fields.json ansehen und etwas Ähnliches wie
Oh, das ist ehrlich gesagt viel einfacher für mich zu bearbeiten!
Bedeutet das, ich kann einfach diese Datei bearbeiten und bin damit fertig? Existiert sie irgendwo so auf meinem Server, und wo finde ich sie?