Discourse 인증 유효성 검사

:discourse2: 요약 Discourse Authentication Validations 플러그인은 User Field에 사용자 정의 검증을 추가하여 Signup Modal에서 User Field의 표시를 전환할 수 있는 기능을 제공합니다.
:hammer_and_wrench: 저장소 링크 https://github.com/discourse/discourse-authentication-validations
:open_book: 설치 가이드 Discourse에 플러그인 설치하는 방법

:information_source: 소개

Discourse Authentication Validations 플러그인은 User Field에 사용자 정의 검증을 추가할 수 있는 기능을 제공합니다.

커스텀 User Field는 필수 필드에서 빈 값을 감지하는 것 외에는 코어에서提供任何 validation(검증) 기능을 제공하지 않습니다. 이 플러그인은 각 User Field별로 정규식(regex)을 정의할 수 있으며, 입력된 값이 해당 정규식에 맞는지 확인합니다.

또한 이 플러그인은 Signup Modal에서 User Field의 표시를 전환할 수 있는 기능을 추가합니다. 이를 통해 User Field를 *“체인”*하여, 이전 User Field에 특정 값이 있을 때만 다음 User Field가 표시되도록 할 수 있습니다.

:building_construction: 기본 설정

1. 플러그인 활성화

Discourse Authentication Validations 플러그인은 admin/plugins 페이지에서 접근할 수 있는 토글 또는 설정에서 활성화할 수 있습니다.

2. User Field에 사용자 정의 검증 추가

Discourse Authentication Validations 플러그인이 활성화되면 User Field 양식의 하단에 사용자 정의 검증 포함 체크박스가 표시됩니다.

체크하면 추가적인 세 가지 필드가 표시됩니다:

  1. 값 검증 정규식 (Value Validation Regex)
  2. 표시 값 (Show Values)
  3. 대상 User Field (Target User Fields)

:closed_lock_with_key: 사용자 정의 검증 추가

값 검증 정규식 필드에 유효한 정규식을 입력하세요:

이제 가입 양식에서 해당 User Field의 값은 입력한 정규식에 대해 테스트됩니다. 입력 값이 사용자 정의 정규식의 기준을 충족하지 않는 경우, 가입 양식은 제출되지 않습니다.

값 없음 (기본 양식 검증에 의존)

잘못된 값

올바른 값

:link: User Field 체이닝

먼저, User Field에 표시 값을 포함하세요.

User Field에 표시 값이 포함되면, 연결된 입력 값이 어떤 표시 값과 일치할 때까지 해당 입력 값을監視합니다. 일치하면 포함된 대상 User Field의 가시성을 전환하여 표시합니다.

다음으로, 대상 User Field 값을 추가하세요.

대상 User Field 드롭다운에서는 사용 가능한 모든 User Field 목록을 볼 수 있습니다. 선택한 User Field의 가시성은 표시 값의 해당하는 값에 의해 전환됩니다.

:hammer_and_wrench: 고급 체이닝

여러 User Field에 사용자 정의 검증을 추가하여 User Field를 체이닝할 수 있습니다.

예를 들어, 다음과 같은 값이 있는 세 개의 User Field가 있다고 가정해 보겠습니다:

이름 사용자 정의 검증 있음 표시 값 대상 User Field
Input One true show-field-two Input Two
Input Two true show-field-three Input Three
Input Three false

Input Two와 Three는 *“자식”*인 Input One의 하위 요소이므로 기본적으로 숨겨집니다. Input One에 show-field-two라는 표시 값이 추가되면 Input Two가 표시되지만, Input Three는 여전히 숨겨진 상태입니다. Input Two에 show-field-three 값이 들어갈 때까지 숨겨진 상태를 유지합니다.

표시 값과 대상 클래스의 올바른 조합을 통해 User Field를 무한정 중첩할 수 있습니다.

18개의 좋아요

안녕하세요 @isaac.

이 플러그인을 정말 좋아합니다. 제가 필요한 것이 정확히 이것이에요! 현재도 유지보수가 되고 있나요? “chaining” 기능에서 문제가 발생하고 있습니다.

위 예시를 그대로 따라 해 보았습니다:

하지만 기본적으로 모든 필드가 표시되고 있습니다… 설명서를 놓친 것이라면 죄송합니다!

1개의 좋아요

죄송합니다. 플러그인은 정상적으로 작동하고 있습니다. 다만, “초대” 링크를 통해 가입하는 경우에는 작동하지 않습니다. 공개된 가입 페이지를 사용하는 경우에는 정상적으로 작동합니다.

초대와 공개 가입 모두에서 로직이 작동하도록 하면 좋은 기능이 될 것 같습니다!

훌륭한 플러그인입니다!

6개의 좋아요

매우 동의합니다. @tobiaseigen 이 플러그인을 더 광범위한 기능으로 채택한다면, @kravitsjacob 가 지적했듯이 공개/초대 두 곳 모두에서 로직이 작동하도록 해야 할 것입니다.

3개의 좋아요

안녕하세요, @isaac. 이 놀라운 플러그인을 다시 한번 감사드립니다. 이 플러그인 덕분에 저에게 정말 많은 디스커스 활용 가능성이 열렸습니다.

작은 버그 하나를 발견했습니다. 질문이 숨겨져 있더라도 답변이 저장되는 것을 확인했습니다. 이로 인해 사용자가 실제로는 제출할 수 없는 답변을 제출하는 의도치 않은 상황이 몇 번 발생했습니다(처음부터 질문을 숨기려 한 이유이기도 합니다). 이 동작은 또 다른 문제도 일으킵니다. 질문이 이중으로 중첩된 경우, 부모 응답이 선택 해제되었음에도 불구하고 여전히 표시되는 현상입니다(트리거 답변이 여전히 선택된 것으로 인식하기 때문입니다). 이 설명이 다소 모호할 수 있으니, 이 동작을 강조하는 GIF를 첨부합니다:

auth null bug

제 바람은 응답이 더 이상 표시되지 않을 때 해당 응답을 null 값으로 초기화하는 것입니다. 이는 양식 설정자가 구성할 수 있는 “선택적(opt-in)” 동작으로 만들 수도 있습니다. 이러한 트리 구조를 내려갈 때 응답이 유지되어야 하는지에 대해서는 서로 다른 철학이 존재할 수 있다고 생각합니다.

이 기능을 구현해 주실 수 있으신가요? :pray:

5개의 좋아요

자세한 답변 감사합니다! 다음 주에 한번 확인해 보겠습니다 :slight_smile:

4개의 좋아요

오늘 이 문제들을 살펴볼 기회가 있었습니다 :slight_smile:

자세한 내용은 PR 설명을 참고해 주세요!

3개의 좋아요

현재 선택 필수 필드(optional required field)를 구현하는 것이 불가능합니다.

“Industry” 필드가 있으며, "Other"가 선택되면 “Other Industry” 필드가 표시됩니다.

하지만 “Other Industry” 필드를 필수로 설정하면, 해당 필드가 숨겨진 상태에서 양식을 제출할 수 없습니다.

div를 수동으로 표시하면 양식이 숨겨져 있음에도 불구하고 해당 입력이 요구되는 것을 확인할 수 있습니다.

"Other"를 선택하고 값을 입력한 후, 다른 산업을 선택하여 입력 필드가 다시 숨겨지도록 하면 양식을 제출할 수 있습니다. 그리고 @kravitsjacob님이 지적한 것과 동일한 상황이 발생합니다: "Industry"가 "Other"로 설정되지 않았음에도 불구하고 “Other Industry” 필드의 값이 사용자 프로필에 저장됩니다.

User Admin:

3개의 좋아요

안녕하세요 @RGJ, 필수 필드 관련 문제를 해결하셨나요? 저도 같은 문제를 겪고 있습니다.
@isaac 이 문제에 대한 우회 방법이 있을까요? 표시 조건이 충족될 때 필수로 설정해야 하는 필드가 있습니다.

1개의 좋아요

아니요, 아직 이 건에 대해 답변을 받지 못했고, 나 역시 시간을 들여 확인해 보지 않았습니다.

@RGJ, 빠른 답변 감사합니다.

원본 저장소에 문제를 해결할 수 있는 수정이 포함된 PR을 방금 생성했습니다.

여기서 가장 큰 도전 과제는 검증이 프론트엔드와 백엔드라는 두 곳에서 실행된다는 점이었습니다. 따라서 각각에 대한 솔루션을 별도로 구현하고, 예상대로 작동하는지 확인해야 했습니다.

이 내용이 향후 누군가에게 도움이 되기를 바랍니다.

1개의 좋아요

각 필드별로 하나의 값이 아닌 필드 값마다 조건부 필드 로직을 추가하는 추가 PR을 추가했습니다. 이는 보유 중인 필드의 값에 따라 다른 필드를 숨기거나 표시할 수 있음을 의미합니다.

JSONB를 저장하는 새 컬럼에 대해 데이터베이스에 저장되는 방식을 미리 볼 수도 있습니다.

2개의 좋아요

이것이 검색 가능한 필드에 어떤 영향을 미치나요?

검색 대상으로 설정한 사용자 정의 필드가 사이트의 사용자 디렉터리 설정 메뉴에 표시되지 않습니다. 대신 해당 필드에 연결된 세 개의 조건부 필드만 표시됩니다. 이 세 필드는 자체적으로 검색 대상으로 설정되어 있지 않습니다.

안녕하세요.
죄송합니다만, 아직 사용자 사용자 정의 필드와 관련된 Discourse의 모든 로직을 파악하지 못해 질문을 정확히 이해했는지 확신이 서지 않습니다.

제가 알고 있는 바로는 Searchable은 필드가 인덱싱되도록 표시하고 포털의 다른 부분에서 사용할 수 있으며, 아직 이 부분을 다루어 본 적 없고 올바르게 구성하는 방법에 대해 잘 모르겠습니다.

이론적으로 조건부 필드는 Searchable 필드에 어떤 영향도 주지 않아야 하며, Autocomplete를 사용하여 값을 붙여 넣을 때도 UserField 요소에 값을 연결하기 때문에 로직이 여전히 작동해야 합니다.

질문에 대해 좀 더 자세한 내용을 추가해 주시거나 스크린샷을 첨부해 주시면 도움이 될 것 같습니다.

말씀을 명확히 하지 못했나 봅니다. 제 질문은 OP와 플러그인 전체에 대한 것이었습니다. 혼란을 드려 죄송합니다.

플러그인의 나머지 로직은 정상적으로 작동하지만, 아래 첫 번째 스크린샷의 상단 필드 값에 따라 표시되는 3개의 필드가 있습니다. 그런데 사용자 디렉터리 설정에서는 원래 검색 대상으로 지정된 필드 대신 이 3개의 종속 필드만 표시됩니다:

스크린샷


1개의 좋아요

이 기능을 사용하여 연령 검증을 하고 18세 미만 사용자의 가입을 차단할 수 있을까요? 사용자가 생년월일을 거짓으로 입력할 수 있다는 점은 알고 있지만, 일단 검증 자체가 가능한지 궁금합니다.