사용자 정의 필드 생성 및 구성

:bookmark: 이 가이드는 Discourse에서 사용자 정의 필드를 생성하고 구성하는 방법을 설명합니다. 가입 양식, 사용자 프로필 및 사용자 디렉터리에 필드를 추가하는 방법도 포함됩니다.

:person_raising_hand: 필요한 사용자 권한: 관리자

사용자 정의 필드를 사용하면 표준 프로필 필드 외에 사용자에게 추가 정보를 수집할 수 있습니다. 이러한 필드는 사용자 카드, 사용자 요약 페이지에 표시될 수 있으며 Data Explorer 플러그인을 통해 조회할 수도 있습니다. 이 가이드에서는 사용자 정의 필드를 생성하고 구성하는 과정을 안내해 드립니다.

사용자 필드 추가

  1. 관리자 > 커뮤니티 > 사용자 필드(discourse.example.com/admin/config/user-fields)로 이동합니다.

  2. 아직 사용자 필드를 생성하지 않았다면 다음 화면이 표시됩니다.

  3. 새 필드를 추가하려면 “사용자 필드 추가” 버튼을 클릭합니다.

필드 유형 선택

필드 유형은 가입 양식에서 사용자가 볼 입력 필드를 결정합니다. 수집하려는 정보의 종류에 따라 선택하세요:

텍스트 필드

  • 가능한 답변이 많은 짧은 질문(예: “어떤 회사에서 일하십니까?”)에 사용합니다.
  • 단일 줄 HTML 텍스트 입력으로 표시됩니다.

텍스트 영역

  • 더 길고 여러 줄의 답변이 필요한 질문(예: “자기소개를 해주세요”)에 사용합니다.
  • 여러 줄 HTML 텍스트 영역 입력으로 표시됩니다.

날짜

  • 날짜 값을 수집할 때(예: “생년월일은 언제입니까?”) 사용합니다.
  • 날짜 선택기 입력으로 표시됩니다.

확인

  • 예/아니오 질문(예: “뉴스레터 구독을 원하십니까?”)에 사용합니다.
  • HTML 체크박스로 표시됩니다.
  • 사용자가 확인해야 하는 중요한 링크를 HTML을 사용하여 추가할 수 있습니다. 예:
    커뮤니티 가이드라인을 읽고 따르겠습니다. <a href="https://meta.discourse.org/guidelines">커뮤니티 가이드라인</a>

드롭다운

  • 가능한 답변이 정해져 있는 질문(예: “성별은 무엇입니까?”)에 사용합니다.
  • HTML select 입력으로 표시됩니다.

드롭다운 필드에 옵션을 추가하려면:

  1. 옵션 입력란을 클릭합니다.
  2. 답변을 입력하고 "생성"을 클릭합니다.
  3. 추가 옵션에 대해 반복합니다.

완료된 옵션은 다음과 유사한 모습을 보여야 합니다:

다중 선택

  • 사용자가 옵션 목록에서 여러 답변을 선택할 수 있는 질문(예: “어떤 주제에 관심이 있습니까?”)에 사용합니다.
  • 다중 선택 입력으로 표시됩니다.
  • 옵션은 드롭다운 필드와 동일한 방식으로 구성됩니다.

필드 이름 및 설명 설정

  • 필드 이름: 가입 양식 및 사용자 프로필에서 입력란 앞에 표시됩니다.
  • 필드 설명: 사용자가 필드를 채우는 데 도움을 주기 위해 입력란 뒤에 표시됩니다.

:information_source: 필드를 저장하려면 필드 이름과 설명 모두 필수입니다.

다음은 가입 양식에 사용자 정의 필드가 표시되는 방법입니다:

사용자 필드 옵션 구성

필드 요구 사항

  • 선택 사항 - 선택 필드는 사용자가 비워 둘 수 있습니다.
  • 모든 사용자 대상 - 필드가 모든 사용자에게 필수로 설정되면, 로그인한 사용자를 포함한 모든 계정에 해당 필드를 채워야 합니다. 이는 서비스 약관(ToS) 준수와 같은 경우에 매우 유용합니다.
  • 가입 시 - 모든 새 계정은 해당 필드를 채워야 합니다.

추가로, 생성 양식의 하단에는 다음 설정 체크박스가 있습니다:

  • 가입 후 수정 가능: 사용자가 프로필 페이지에서 필드를 업데이트할 수 있도록 허용합니다.
  • 공개 프로필에 표시: 사용자 요약 페이지에 필드 값을 표시합니다.
  • 사용자 카드에 표시: 사용자 카드에 필드 값을 표시합니다.
  • 검색 가능: 사용자 디렉터리에서 이 필드의 값에 기반하여 사용자를 검색할 수 있도록 활성화합니다.
  • 가입 양식에 표시: 필드가 가입 양식에 표시되는지 여부를 제어합니다. 필드 요구 사항이 “모든 사용자 대상” 또는 "가입 시"이거나, 필드가 가입 후 수정 불가능한 경우 자동으로 활성화되며(비활성화할 수 없음) 유지됩니다.

공개 프로필에 표시

활성화된 경우, 필드 값은 사용자의 프로필 페이지에 표시됩니다:

사용자 카드에 표시

활성화된 경우, 필드 값은 사용자 카드에 표시됩니다:

검색 가능

활성화된 경우, 사용자 정의 필드 값에 기반하여 사용자를 검색할 수 있습니다:

필드 저장 및 편집

  1. "저장"을 클릭하여 사이트를 사용자 필드 목록에 추가합니다.
  2. 필드를 편집하려면 목록에서 해당 필드 옆의 “편집” 버튼을 클릭합니다.
  3. 필드를 삭제하려면 옆의 점 메뉴(⋮)를 클릭하고 "삭제"를 선택합니다.

사용자 디렉터리에 사용자 정의 필드 추가

  1. 사용자 디렉터리로 이동합니다.
  2. 렌치 아이콘을 클릭합니다:

  1. 표시할 사용자 정의 필드를 선택합니다.
  2. "저장"을 클릭합니다.

선택한 사용자 정의 필드는 이제 사용자 디렉터리 테이블에 표시됩니다:

40개의 좋아요
Any Plugins/Easy Mods for an Extended User Profile
Add introductory text for sign-up
Setting Security Parameters: Log-In, Read-Only, Protected Groups
Theme-Component v Plugin: What's the difference
User preference on theme components
Users self-select Category on Registration... is it possible?
Private custom user fields...?
Can we implement a system for user remarks during registration for admin review?
User customizable theme components (how-to)
This freaking software works so well I can’t even
User Field Prompt
New user reviews: admin assignment and logging of progress
Add users to groups on signup
How to add min or max values in custom fields?
Add a custom per-user setting in a plugin
Welcome questions on the first screen for bio
Announcing - Gender Pronouns Userfield on Meta
Grant Custom Badge Upon Reading ToS
If topic info is too long, tags are cut off and create a blank line
Required vs. optional sign-up fields
Terms of Service Checkbox
Hidden User Fields
New user filter by custom field and contact
Social Features
Where in Discourse can users publicly share PII?
Linking "static" information about member to topic posted
Add custom fields to signup and login
Using Discourse as a social media platform
Add users to groups through custom field automation
Custom user post display
Disable account confirm emails when creating users via API
Links in additional fields
Clickable Social Icon Links on Profile
Extend Existing Controller?
Requiring acceptance of terms and conditions
"Fake" OAuth Provider?
Extend Existing Controller?
Allow users to block keywords
Customize Your Site Branding
Restrict the users to post in the groups who haven't uploaded their profile picture
Adding non-visible user custom fields to the API
Seeking Advice: making a discourse forum hyper local
Can add short message to verify? Just input phone number can sign up
Add terms when make new topic
Export custom field for users in discourse hosted forum
Customizing Sign-up and Log in
Grouping poll results by user custom field
Disclaimer for tutorials
How to add custom logic input on the signup page?
Terms of service changes in Discourse platform
Custom user fields not available in api

다음 제목 아래에 이미지가 두 개 누락된 것 같습니다:

Missing images at Meta.discourse.org와 관련이 있는지 확실하지 않으나, 해당 게시물에도 작성하겠습니다.

그 이미지들을 볼 수 있나요? (익명 창에서도)

1개의 좋아요

이것들을 볼 수 없습니다.

하지만 두 번째 것은 제 인용문에서 작동합니다.

수정

1개의 좋아요

재미있는 건 인용된 글에서는 두 번째 사진을 볼 수 있지만, 원문에서는 볼 수 없다는 거예요^^

1개의 좋아요

흠. 흥미롭네요. Missing images at Meta.discourse.org 이슈에 대한 수정이 곧 나올 것 같으니, 그로 인해 해결되길 바랍니다. :crossed_fingers:

2개의 좋아요

사용자 정의 필드의 최대 길이를 지정하기 위해 수정해야 하는 설정이 있나요? 현재 테스트용 사용자 필드로 생성한 이 “Test” 필드에서 사용자 프로필에 문자를 하나도 입력할 수 없습니다(화면에 표시된 "Test"조차도 입력할 수 없어요).

필드 유형으로 링크/URL을 사용할 수 있을까요?

URL은 텍스트이므로, @Vaping_Community 님, 기술적으로 텍스트 필드가 작동합니다. 다만, 값 검증이나 유사한 추가 세부 사항이 필요하신 것일 수도 있습니다.

Contribute > Feature 토픽에서 구상하신 내용을 검색하거나 생성해 보시기 바랍니다. :slight_smile:

3개의 좋아요

커스텀 사용자 필드에 대해 여러 줄/컴포저를 허용할 계획이 있나요? :folded_hands:

사용자 정의 필드에 링크를 삽입하려면 HTML 구문을 사용해야 합니다!
<a href="url">링크 텍스트</a>

예를 들어, 커뮤니티 가이드라인/정책을 확인했음을 알리려면:

1개의 좋아요

Auth0 SSO의 사용자 정의 클레임(custom claim)을 사용자 정의 필드에 연결할 수 있을까요? 현재 사용자는 Auth0에서 필드 정보를 입력한 후, 가입 시에도 다시 한 번 입력해야 합니다. 가능하다면 해당 값이 매핑되도록 설정하고 싶습니다.

네, 가능합니다:

SSO 엔드포인트 내에서 클레임을 페이로드에 매핑할 수 있습니다. 예를 들어:

const ssoPayload = {
  nonce: nonce,
  email: user.email,
  external_id: user.sub,
  username: user.nickname,
  name: user.name,
  add_groups: a_custom_group,
  'custom.user_field_1': user['https://yourdomain.com/company_id'],
  'custom.user_field_2':  [etc...]
3개의 좋아요

고맙습니다 @dax

db에서 필드 이름을 확인할 수 있는 방법이 있을까요? 예를 들어, 이름(first name) 필드가 있는데 custom.firstname, custom.first_name, custom.firstName을 시도해 보았지만, 가입 화면에 필드가 채워지지 않았습니다.

위와 같이 토큰 필드가 들어오고 있는지 확인하기 위해 에러 로그를 확인했습니다.

여기서 코드를 더 자세히 살펴보면, 이것은 Discourse Connect SSO에만 해당하나요? 저희는 Auth0 플러그인을 사용하고 있습니다.

구문은 custom.user_field_x여야 하며, 여기서 x는 /admin/config/user-fields/{x}/edit에 표시된 숫자 필드 ID입니다.

해당 매핑 기능은 Auth0 플러그인에서 직접 사용할 수 없습니다.

그럼에도 불구하고, 귀하가 설명하신 내용을 달성할 수 있는 몇 가지 옵션이 있습니다:

  • 테마 컴포넌트 생성. 이미 Auth0에 저장된 값과 Discourse 사용자 정의 사용자 필드를 자동으로 동기화하는 작은 프론트엔드 스크립트를 추가할 수 있습니다. 예를 들어, 사용자가 로그인하고 해당 필드가 비어 있는 경우, 스크립트가 보안 엔드포인트(작은 클라우드 함수)를 호출하여 Auth0에서 필드 값을 가져오고 API를 통해 Discourse 프로필을 업데이트할 수 있습니다.
  • 자동화 도구 사용. Discourse 외부에서 해당 동기화를 수행하기 위해 Zapier나 Make와 같은 외부 자동화 서비스를 사용할 수도 있습니다. 이 방식의 장점은 코드를 작성하거나 유지보수할 필요가 없고 제3자 서비스에 대한 비용만 지불하면 된다는 것입니다.
  • 맞춤형 개발. Auth0 플러그인 자체를 확장하여 로그인 시 사용자 정의 클레임을 사용자 필드로 네이티브 매핑을 지원하도록 하거나, Auth0 플러그인과 함께 작동하는 맞춤형 플러그인을 구축할 수 있습니다.

테마 컴포넌트 방식의 명확한 단점은 사용자 정의 코드를 직접 작성하고 유지보수해야 하며, 잠재적인 버그나 취약점을 도입하지 않도록 보안 측면에서도 주의를 기울여야 한다는 점입니다. 솔직히 말하면, 귀하와 같은 프로덕션 사이트에는 권장하지 않는 솔루션입니다.

저라면 두 번째 옵션인 제3자 도구 사용, 또는 Auth0 플러그인 자체를 강화하기 위한 기능 요청 또는 맞춤형 작업 요청(프로젝트 매니저들의 평가에 따라)을 고려하는 쪽에 더 무게를 둘 것입니다.

마지막 옵션에 관심이 있으시다면, 비공개로 대화를 이어나갈 수 있습니다.

1개의 좋아요

긴 사용자 필드 목록을 작은 화살표를 하나씩 클릭해서 한 단계씩 위나 아래로 이동시키는 것보다 더 간편한 재배열 방법이 있는지 궁금합니다… :face_with_peeking_eye:

사용자 필드 목록 개요에서 가입 양식에 있는 필수 필드(예: Je suis… Pays)와 선택 필드(예: Mes attentes)를 어떻게 구분하는지 확인이 안 됩니다. 제가 뭘 놓치고 있는 건지, 아니면 이 부분이 누락된 건지 궁금합니다. 선택 필드인지 확인하려면 필드를 편집해야 하니 상당히 번거롭습니다. (이것이 적절한 장소인지 확실하지 않아서 어디에 올려야 할지 몰랐습니다.)

데이터를 제공하는 JSON 파일이 조금이나마 도움이 될 수 있을 것 같습니다. 완벽하진 않지만 /admin/config/user-fields.json 파일을 확인하면 다음과 같은 내용을 볼 수 있습니다.

    {
      "id": 18,
      "name": "Age",
      "description": "How old are you?",
      "field_type": "text",
      "editable": true,
      "required": false,
      "requirement": "optional",
      "show_on_profile": false,
      "show_on_user_card": false,
      "show_on_signup": false,
      "searchable": false,
      "position": 9
    },
    {
      "id": 17,
      "name": "pets",
      "description": "choose your favourite",
      "field_type": "dropdown",
      "editable": true,
      "required": false,
      "requirement": "optional",
      "show_on_profile": false,
      "show_on_user_card": false,
      "show_on_signup": false,
      "searchable": false,
      "position": 10,
      "options": [
        "cat",
        "mouse",
        "dog"
      ]
    },

물론 인터페이스에 표시되는 정보만큼 보기 좋지는 않습니다.

1개의 좋아요

아, 그건 정말로 훨씬 다루기 편하네요!
그럼 그 파일만 수정하면 끝나는 건가요? 제 서버 어딘가에 실제로 그런 파일이 있나요? 어디서 찾을 수 있을까요? :heart_eyes::heart_eyes::heart_eyes: