This guide explains how to create and configure custom user fields in Discourse, including how to add them to the signup form, user profiles, and user directory.
Required user level: Administrator
Custom user fields allow you to collect additional information from your users beyond the standard profile fields. These fields can be displayed on user cards, user summary pages, and even retrieved using the Data Explorer plugin. This guide will walk you through the process of creating and configuring custom user fields.
Adding a user field
Go to Admin > Community > User Fields (discourse.example.com/admin/config/user-fields).
If you haven’t created any user fields yet, you’ll see this screen:
Optional - Optional fields may be left empty by users
For all users - When a field is required by all users, every account, including logged on users will be forced to fill it. This is very useful for cases such as a terms-of-service (ToS) requirement.
On signup - All new account will be required to fill the field.
Additionally, at the bottom of the creation form, you’ll find these preference checkboxes:
Editable after signup: Allows users to update the field from their profile page
Show on public profile: Displays the field value on the user’s summary page
Show on user card: Shows the field value on the user card
Searchable: Enables searching for users based on this field’s value in the user directory
Show on signup form: Controls whether the field appears on the signup form. This is automatically enabled (and cannot be disabled) when the field requirement is “For all users” or “On signup”, or when the field is not editable after signup.
Show on public profile
When enabled, the field value will be shown on the user’s profile page:
Есть ли настройка, которую мне нужно изменить, чтобы указать максимальную длину пользовательского поля? Сейчас в этом поле «Test», которое я создал как тестовое пользовательское поле, я не могу ввести даже один символ в своём профиле (даже слово «Test», как показано на скриншоте).
Так как URL — это текст, текстовое поле технически работает, @Vaping_Community. Однако, возможно, вы ищете дополнительные возможности, такие как валидация значений или что-то подобное.
Вы можете поискать или создать тему с тегом #feature с описанием вашей идеи.
Обратите внимание: если вы хотите вставить ссылку в одно из пользовательских полей, необходимо использовать HTML-синтаксис! <a href="url">текст ссылки</a>
Например, для указания на правила/политики сообщества:
Могу ли я сопоставить пользовательское утверждение из моего SSO в Auth0 с пользовательским полем? Сейчас пользователь вводит информацию о поле в Auth0, а затем должен ввести её повторно при регистрации. Я хотел бы, чтобы значение было перенесено автоматически, если это возможно.
Есть ли способ проверить имя поля в базе данных? Например, у нас есть поле «имя», я пробовал custom.firstname, custom.first_name и custom.firstName, но ни один из них не привел к заполнению полей на экране регистрации.
Я проверил логи ошибок, чтобы подтвердить, что токены полей приходят так, как показано выше.
Синтаксис должен быть custom.user_field_x, где x — числовой идентификатор поля, отображаемый в /admin/config/user-fields/{x}/edit.
Функция сопоставления недоступна напрямую в плагине Auth0.
Тем не менее, есть варианты реализации того, что вы описываете:
создание компонента темы. Вы можете добавить небольшой фронтенд-скрипт, который автоматически синхронизирует пользовательское поле в Discourse со значением, уже сохранённым в Auth0. Например, когда пользователь входит в систему, а поле пустое, скрипт может вызвать защищённую конечную точку (небольшую облачную функцию), которая получит значение поля из Auth0 и обновит профиль в Discourse через API.
использование инструментов автоматизации. Вы также можете использовать внешние сервисы автоматизации, такие как Zapier или Make, для выполнения этой синхронизации вне Discourse. Преимущество в том, что вам не нужно писать или поддерживать код, достаточно только платить за сторонний сервис.
кастомная разработка. Мы можем расширить сам плагин Auth0, чтобы он нативно поддерживал сопоставление пользовательских утверждений (custom claims) с пользовательскими полями при входе, либо создать собственный плагин, работающий в паре с плагином Auth0.
Явный недостаток подхода с компонентом темы заключается в том, что вам придётся самостоятельно писать и поддерживать кастомный код, а также проявлять осторожность с точки зрения безопасности, чтобы не допустить потенциальных ошибок или уязвимостей. Честно говоря, это не решение, которое я бы рекомендовал для продакшн-сайта, подобного вашему.
Если бы я был на вашем месте, я бы склонился ко второму варианту — использованию сторонних инструментов, или рассмотрел бы возможность подачи запроса на новую функцию или запроса на кастомную разработку (в зависимости от оценки нашими менеджерами проектов) для расширения самого плагина Auth0.
Если вы заинтересованы в рассмотрении последнего варианта, мы можем продолжить обсуждение в личном порядке.
Интересует, есть ли более удобный способ реорганизовать длинный список полей пользователя, чем по одному кликать на маленькие стрелочки, чтобы перемещать их вверх или вниз по одному шагу за раз…?
В общем списке полей пользователя я не вижу, как отличить обязательные поля (например, «Je suis… Pays»), которые отображаются в форме регистрации, от необязательных (например, «Mes attentes»). Я что-то упускаю, или это упущение? Очень неудобно редактировать поле, чтобы узнать, является ли оно необязательным. (Не уверен, что это правильное место для такого вопроса, не знал, куда его разместить.)
Возможно, JSON, предоставляющий данные, может немного помочь. Это не совсем красиво, но вы можете посмотреть на /admin/config/user-fields.json и увидеть что-то вроде
Ого, это действительно гораздо удобнее для работы!
Значит, я могу просто отредактировать этот файл и всё готово? Существует ли он в таком виде на моём сервере и где его найти?