В этом руководстве объясняется, как создавать и настраивать пользовательские поля в Discourse, включая их добавление в форму регистрации, профили пользователей и каталог пользователей.
Требуемый уровень доступа: Администратор
Пользовательские поля позволяют собирать дополнительную информацию от пользователей помимо стандартных полей профиля. Эти поля могут отображаться на карточках пользователей, страницах сводки профиля и даже извлекаться с помощью плагина Data Explorer. В этом руководстве мы рассмотрим процесс создания и настройки пользовательских полей.
Добавление пользовательского поля
Перейдите в Администрирование > Сообщество > Пользовательские поля (discourse.example.com/admin/config/user-fields).
Если вы еще не создали ни одного пользовательского поля, вы увидите этот экран:
Добавьте важные ссылки, которые пользователям нужно подтвердить, используя HTML, например: Я соглашаюсь прочитать и соблюдать <a href="https://meta.discourse.org/guidelines">правила сообщества.</a>
Необязательное – Необязательные поля могут оставаться пустыми
Для всех пользователей – Когда поле обязательно для всех пользователей, каждый аккаунт, включая уже зарегистрированных пользователей, будет вынужден заполнить его. Это очень полезно в таких случаях, как требование принять условия обслуживания (ToS).
При регистрации – Все новые аккаунты будут обязаны заполнить это поле.
Кроме того, в нижней части формы создания вы найдете следующие флажки настроек:
Редактируемое после регистрации: Позволяет пользователям обновлять значение поля со страницы своего профиля
Отображать в публичном профиле: Отображает значение поля на странице сводки профиля пользователя
Отображать на карточке пользователя: Показывает значение поля на карточке пользователя
Искомое: Позволяет искать пользователей на основе значения этого поля в каталоге пользователей
Показывать в форме регистрации: Управляет тем, отображается ли поле в форме регистрации. Это включается автоматически (и не может быть отключено), если требование к полю установлено как «Для всех пользователей» или «При регистрации», или если поле не редактируется после регистрации.
Отображать в публичном профиле
Если включено, значение поля будет показано на странице профиля пользователя:
Есть ли настройка, которую мне нужно изменить, чтобы указать максимальную длину пользовательского поля? Сейчас в этом поле «Test», которое я создал как тестовое пользовательское поле, я не могу ввести даже один символ в своём профиле (даже слово «Test», как показано на скриншоте).
Так как URL — это текст, текстовое поле технически подходит, @Vaping_Community. Однако вам могут потребоваться дополнительные функции, например, проверка значения или что-то подобное.
Обратите внимание: если вы хотите вставить ссылку в одно из пользовательских полей, необходимо использовать 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 и увидеть что-то вроде
Ого, это действительно гораздо удобнее для работы!
Значит, я могу просто отредактировать этот файл и всё готово? Существует ли он в таком виде на моём сервере и где его найти?