이름이 사용자명과 일치할 때 인용이 깨집니다

Configuring X login and rich embeds for Discourse - #114 by Hifihedgehog 이 게시글에서 이어집니다.

이와 관련하여 이메일을 받았는데, 제가 이런 게시글을 작성한 기억이 없어서 매우 혼란스러웠습니다.

답글 인용에서 'taylor’가 어떻게 교체된 것인지 궁금합니다. 이것이 수동 편집 실수일까요 (수동으로 출처를 포함하는 인용 블록을 만드는 방법을 모르겠고, 심지어 그것이 가능한지조차 확실하지 않습니다). 아니면 답글 로직 어딘가에 버그가 있는 걸까요? @tshenry

1개의 좋아요

최근 몇 개의 게시물을 인용해 봤는데, 사용자 이름과 전체 이름 관련해서 뭔가 이상한 일이 일어나는 것 같습니다. 아마도 최근 커밋 때문일 것 같습니다:

1개의 좋아요

안녕하세요 @JammyDodger,

에 대해 좀 더 자세히 알려 주실 수 있을까요?

사이트 설정에서 prioritize username in ux(UX에서 사용자 이름 우선)를 켜 놓고 display name on posts(게시물에 표시 이름 표시)를 꺼 놓으면 인용문에 사용자 이름이 표시되고, 반대로 전체 이름이 표시되려면 이 설정들을 반대로 해야 합니다.

1개의 좋아요

죄송합니다, 거기서 훨씬 더 도움을 드릴 수 있었을 텐데 말이죠. :slightly_smiling_face: 방금 이 주제 안의 여러 게시물을 인용해 봤는데, 제 작성기에서 좀 이상한 결과가 나왔습니다:

@Hifihedgehog님의 게시물:

[quote=", post:114, topic:13395"]
당신이 맞아요! 겨우 몇 분밖에 안 걸렸고 바로 승인되었습니다. 간단한 수정은 항상 좋죠! :smile:
[/quote]

@tshenry님의 게시물:

[quote="Taylor, post:113, topic:13395"]
Elevated 플랜에서 v1.1 API에 무료로 접근할 수 있습니다. 개발자 대시보드에서 신청하기만 하면 됩니다. 매우 빠르고 쉬웠습니다. 그 후로 Discourse의 Twitter 로그인도 완벽하게 작동했습니다 :tada:
[/quote]

(이것은 @taylor님이 알림을 받은 스타일입니다)

4개의 좋아요

아, 지적해 주셔서 감사합니다… 예, 이건 바람직하지도, 의도된 동작도 아닙니다. 확인해 보겠습니다!

3개의 좋아요

따라서 @taylor가 이 인용문에 태그가 지정되고(이메일을 받은) 이유는 그의 사용자 이름인 Taylor이 @tshenry의 전체 이름인 Taylor과 같기 때문이며 :open_mouth: 이는 https://github.com/discourse/discourse/commit/5a93ce421da4e52b9d649cf609cd7d79d21a1683에서 추가된 변경 사항으로 인해 인용문에서 전체 이름이 올바르게 우선시되고 있기 때문입니다.

어쨌든, 팁을 알려주셔서 감사합니다. 이 문제를 수정하겠습니다!

9개의 좋아요

참고로, 이름이 없는 인용문은 공란으로 남기도 합니다:

4개의 좋아요

이제 이 부분은 해결된 거죠 @isaac?

네, 변경 사항을 되돌렸고, 다시 병합하기 전에 로직을 수정하는 작업을 진행 중입니다.

3개의 좋아요

사이트 설정을 통해 사용자 이름(username) 또는 **성명(full name)**을 토글할 수 있도록 인용(quote) 로직을 업데이트하는 과정에서 문제가 발생했습니다 (일부는 위에서 언급했음). 가상의 시나리오를 만들어 보겠습니다…

  • Tim이 게시물을 생성합니다.
  • OP(첫 번째 게시자) 표시 이름을 사용자 이름 (활성화됨) 또는 성명 **(현재 활성화됨)**으로 토글하는 사이트 설정이 추가되고 활성화됩니다.
  • 다른 사용자가 새 게시물에서 Tim을 인용합니다. 하지만 이제 인용에 성명을 사용하고 있기 때문에, 다른 사용자 **TimTam (성명: Tim)**이 자신이 작성하지도 않은 게시물에서 인용받았다는 알림을 받게 됩니다.

모든 인용을 다시 생성(Rebake)하는 것도 불가능합니다. 이 사이트 설정이 여러 번 토글되고 여러 번 다시 생성된 경우, 성명에서 사용자 이름으로 변환되는 인용은 고유하지 않아 여러 사용자를 찾을 수 있습니다.

저희가 취할 것으로 보이는 방안은 인용에 data-full-name="true" *(또는 유사한 것)*라는 추가 데이터 속성을 추가하여, data-username을 조작하는 대신 UX에서 사용자 이름을 성명으로 교체해야 하는지 확인하는 것입니다.

예를 들어:

data-username="always.users.username" data-post="1" data-topic="1" data-full-name="true"

이렇게 하면 사용자 이름 또는 성명으로 쿼리를 실행하거나 알림을 보내는지에 대한 걱정을 덜 수 있습니다. 의견이 있으신가요? 이 변경 사항을 위해 PrettyText와 인용 빌더를 업데이트하는 것이 가치가 있을까요?

5개의 좋아요

스위트오버(switch-over)에 대한 지원을 추가하는 것은 선호하지 않습니다. 이는 커뮤니티 설정 초기에 결정해야 할 사항이며, 매우 부드러운 스위트오버를 지원하는 것은 비용이 매우 많이 들고 여러 트레이드오프가 따릅니다.

사용자 이름 우선으로 인용하면 이 마크다운이 렌더링됩니다.

[quote="isaacjanzen, post:12, topic:217633"]
Thoughts?
[/quote]

이름 우선으로 인용하면 이 마크다운이 렌더링됩니다.

[quote="Isaac Janzen, post:12, topic:217633"]
Thoughts?
[/quote]

전체 이름에 포함된 , 기호에는 주의해야 합니다 - 이 용례를 위해 이를 제거하는 것을 지원하거나, 또는 어떤 이스케이프 트릭을 도입할 수 있을 것입니다.

4개의 좋아요

전체 이름을 사용하여 인용문을 표시하는 기능을 추가하려는 시도를 포기하라는 말씀이신가요? 우리는 결국 이러한 스위칭오버 상황에 직면하게 될 것입니다… 예를 들어, 인용문이 이미 존재하는 기존 커뮤니티의 경우 등입니다.

1개의 좋아요

아니요, 완전히 폐기하라는 뜻은 아닙니다… 메타 설정에서 prioritize username in ux(UX에서 사용자 이름 우선순위)가 비활성화되어 있습니다. 방금 만든 인용은 다음과 같아야 합니다: (아바타가 누락되어 있어 수정이 필요합니다)

여기의 마크업은 다음과 같아야 합니다:

[quote="Isaac Janzen, post:14, topic:217633"]
전체 이름으로 인용을 표시할 수 있는 기능을 추가하려는 시도를 중단하라는 권고를 하고 계신 건가요?
[/quote]

인용 위젯이 해당 설정을 인식하도록 하여 사용자 이름 대신 전체 이름을 채우도록 하는 것만 변경하면 됩니다. 마이그레이션과 히스토리는 걱정하지 않으셔도 됩니다.

1개의 좋아요

여기서 우리가 같은 이해를 하고 있는지 확신이 서지 않습니다… DEV: Prioritize full name when setting active (#15820) · discourse/discourse@5a93ce4 · GitHub 를 병합했을 때 우리는

  # quote.js
  # 사이트 설정에서 전체 이름 우선순위가 높으면 opts.displayName = true
  const name = opts.displayName
    ? opts.name || post.name
    : opts.username || post.username;

  # 인용 마크다운 생성
  const params = [
    name,
    `post:${opts.post || post.post_number}`,
    `topic:${opts.topic || post.topic_id}`,
  ];

를 통해 다음과 같은 출력을 얻었습니다.

하지만 문제는 전체 이름 기반의 사용자 조회가 사용자 이름으로 생성된 기존 인용들을 깨뜨리는 것이었습니다.

따라서

을 무시하는 것이 불가능해 보입니다.

1개의 좋아요

메타에 이렇게 표시되어 있어서 정말 혼란스럽습니다:

그러면 왜 위의 인용문에 이름이 없는 걸까요? 변경 사항이 롤백된 건가요?

여기서 더 많은 작업이 필요하다는 데 동의합니다:

“post / topic” 조합에서 사용자 이름을 가져와서 조리된 마크다운(cooked markdown)에 배치해야 합니다(이를 무조건적으로 수행해야 합니다). 그렇지 않으면 전체 이름에 대한 아바타를 표시할 수 없습니다.

이렇게 하면 이 엣지 케이스도 수정하여, 이 잘못된 인용문에서 제 아바타가 표시되지 않도록 할 수 있습니다. (또는 잘못된 인용임을 강조할 수도 있습니다)

1개의 좋아요

아, 그래

동의합니다. 이 부분을 추가하겠습니다.

2개의 좋아요

거기서 몇 가지 엣지 케이스를 수정하는 데 완전히 개방적입니다:

  1. 사용자 이름 불일치
    • 아바타는 어떻게 처리합니까?
    • 사용자 이름은 어떻게 처리합니까?
  2. 전체 이름 불일치
    • 아바타는 어떻게 처리합니까?
    • 이름은 어떻게 처리합니까?

지금은 그냥 "오버라이드"하는 것이 최선이라고 생각합니다. 게시글에 이름/사용자 이름이 있는 경우, 인용문에 제공된 것보다 이를 우선 사용하고, 현재 이름/현재 사용자 이름을 적용하세요.

3개의 좋아요

좋아요, 상황을 명확히 하는 PR을 올렸습니다.

주요 내용

이제 다음 조건이 충족될 때

siteSettings.display_name_on_posts && !siteSettings.prioritize_username_in_ux && post.name

사용자 이름과 전체 이름을 함께 전달하여, 사용자/아바타를 조회할 때 불일치가 발생하지 않도록 보장합니다.

예시:

[quote="Isaac Janzen, post:3, topic:7, full:true, username:isaac.janzen"]
빙 봉
[/quote]

@sam 님, 어떻게 생각하시나요?

3개의 좋아요

거대한 보안 문제로 인한 깊은 골칫거리를 피하기 위해 마크다운 변경을 수용할 수 있다고 생각합니다. 다만 이 변경은 매우 정밀하게 이루어져야 합니다.

새로운 상세한 구문(verbose syntax)이 siteSettings.display_name_on_posts && !siteSettings.prioritize_username_in_ux 둘 다 참일 때만 항상 발생하는지 확인해 주실 수 있나요?

[quote="Isaac Janzen, post:3, topic:7, username:isaac.janzen"]
....
[/quote]

즉, display_name_on_posts를 활성화하고 prioritize_username_in_ux를 비활성화하지 않으면

기존의 인용 형식이 유지되어야 합니다:

[quote="isaac.janzen, post:3, topic:7"]
....
[/quote]

저는 이를 당분간 중간 단계로 수용할 의향이 있지만, 장기적인 목표는 인용 블록에서 이러한 노이즈를 제거하여(보안을 강화하고 악용을 제한) 항상 사용해 왔던 축약된 인용 형식을 지원하는 것입니다. 이는 인라인 원박스(inline oneboxes)의 경우와 마찬가지로, 현재 우리가 강제당하고 있는 것처럼 보안 관련 복잡한 문제를 해결해야 합니다. 예: Quoting broken when name matches username - #20 by isaac ← https://meta.discourse.org/t/quoting-broken-when-name-matches-username/217633/20?u=sam

이전에 논의된 내용과 관련이 있으므로 가시성을 위해 @tobiaseigen 님을 언급합니다.

결론:

  • 제 생각에는 이 경계 사례에 대해, 그리고 이 경계 사례에 대해서만 마크다운 형식을 변경하는 것은 괜찮습니다 - @codinghorror 님이 확인해 주십시오.
  • 인용 블록이 [quote="보안 조건이 맞고 게시물 정보가 이 텍스트보다 우선시될 경우 게시물에서 추출되는 완전히 선택적 필드, post:3, topic:7"]가 되도록 하는 보안 작업 일정은 미정입니다. - 이 부분은 좀 더 기다리는 것을 권장합니다.
3개의 좋아요

DEV: Prioritize full name when display_name_on_posts active - Pull Request #16078 - discourse/discourse - GitHub 을 병합하고 배포했습니다.

확인했습니다.

3개의 좋아요