# DiscourseConnect를 사용하지 않는 경우 discourse\_username 입력

**URL:** https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741
**Category:** WordPress
**Created:** [12월 21, 2021, 3:24오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741 "2021-12-21T03:24:03Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [12월 21, 2021, 3:24오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/1 "2021-12-21T03:24:03Z")

</div>

이것은 오래된 GitHub 이슈에 올라온 질문이며, 메타(meta)에서 더 쉽게 추적할 수 있습니다.

[https://github.com/discourse/wp-discourse/issues/237](https://github.com/discourse/wp-discourse/issues/237)

@mattdm 님의 글:

> 로그인에 OpenID를 사용하고 있는데, 해당 옵션이 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)를 사용할 때만 이용 가능한 것 같습니다. 다른 방법이 있을까요? 수동으로 입력하는 것은 꽤 번거롭습니다.
> 
> Discourse 사이트에서 사용자는 이메일 주소를 편집할 수 있습니다(SSO와 별개로). 하지만 사용자 ID는 동일하게 보장됩니다.

제 초기 답변(아직 해결되지 않은 질문이 있습니다)

> @mattdm 님, 몇 가지 사항을 명확히 해 주시겠어요:
> 
> 1. 사용자의 이메일 주소가 WordPress와 Discourse 계정 간에 다를 수 있나요?
> 2. "사용자 ID는 동일하게 보장된다"는 것은 무슨 뜻인가요? 어떤 사용자 ID를 말씀하시는 건가요?

---

<div class="post-metadata">

### Author: ![mattdm](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mattdm/32/216484_2.png) [@mattdm](https://meta.discourse.org/u/mattdm)
#### Post date: [12월 21, 2021, 4:18오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/2 "2021-12-21T04:18:30Z")

</div>

아, 죄송합니다 — 전에 답변을 했다고 확신했는데… 그렇지 않았나 봅니다. 그냥 생각만 하고 있었던 것 같네요! 어쨌든:

1. 이메일은 처음에 WordPress와 Discourse 모두 SSO에서 동기화됩니다. 하지만 많은 요청이 있어, Discourse에서 해당 이메일을 변경할 수 있도록 허용했습니다. (로그인에 직접 연결된 이메일 주소가 아닌 다른 곳으로 Discourse 알림을 보내고 싶어하는 경우가 꽤 잦은 것으로 드러났습니다.) WordPress에서도 이메일 주소를 변경할 수는 있지만, 그렇게 하는 사람이 있는지, 심지어 해당 인스턴스에서 나가는 이메일이 \_동작하는지\_조차 알지 못합니다.

2. "user id"라고 한 것은 "username"을 의미했습니다. 사용자 이름은 항상\[1\] Discourse와 WordPress 모두 SSO에서 가져오며, 어떤 경우에도 사용자가 변경할 수 없습니다. 제게는 알 수 없는 이유지만, 당시에는 합리적이었을 가능성이 있습니다. SSO 쪽에서는 이것이 `nickname`으로 처리되며, `oauth2 json username path`에 매핑됩니다.

* * *

1. 실제로 제 계정처럼 SSO를 도입하기 _전에_ 설정된 일부 계정은 잘못된 상태입니다. 저는 mattdm 대신 "Matthew Miller"로 표시되어 있습니다. 하지만 이 부분은 정리할 수 있습니다.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [12월 22, 2021, 3:54오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/3 "2021-12-22T03:54:38Z")

</div>

음, 알겠습니다. 즉, 실제로는

1. WordPress와 Discourse에서 서로 다른 이메일을 사용하는 사용자 하위 집합이 존재하게 됩니다.
2. WordPress와 Discourse 양쪽 모두에서 사용자 이름은 ID 제공자(Identity Provider)가 제공하는 것과 동일하게 보장됩니다.

[WP Discourse](https://github.com/discourse/wp-discourse) 사용자 웹훅을 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) 기능과 분리할 수 있다면(가능합니다), 사용자 매칭은 사용자 이름이 아닌 이메일을 기준으로 이루어질 것입니다. 현재 상황은 귀하의 ID 설정에 다소 특이한 경우입니다.

이 경우를 처리하는 것이 더 나은 방법은 WordPress에서 사용자 정의 코드를 사용하는 것이라고 생각합니다. 원하시는 것은 다음과 같은 것입니다:

```plaintext
function update_discourse_username( $user_login, $user ) {
    update_user_meta( $user->ID, 'discourse_username', $user_login );
}
add_action( 'wp_login', 'update_discourse_username', 10, 2);

```

기본적으로 로그인 후 WP 사용자 이름을 `discourse_username` 메타 필드로 할당하면 됩니다. 두 값은 항상 동일하게 보장되므로요. 참고로 "user\_login"은 WordPress 코드에서 "username"이라고도 불리는 것입니다.

---

<div class="post-metadata">

### Author: ![mattdm](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mattdm/32/216484_2.png) [@mattdm](https://meta.discourse.org/u/mattdm)
#### Post date: [5월 28, 2024, 2:24오후 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/4 "2024-05-28T14:24:22Z")

</div>

> [@angus](#):
>
> 음, 알겠습니다. 결국
> 
> 1. WordPress와 Discourse에서 서로 다른 이메일을 사용하는 사용자 하위 집합이 있을 것입니다.
> 2. 사용자 이름은 WordPress와 Discourse 모두에서 신원 제공자(identity provider)가 제공하는 것과 동일하게 보장됩니다.
> 
> [WP Discourse](https://github.com/discourse/wp-discourse) 사용자 웹훅을 [DiscourseConnect](https://meta.discourse.org/t/13045) 기능에서 분리할 수 있다면(가능하다면), 사용자 매칭은 사용자 이름이 아닌 이메일을 기준으로 이루어질 것입니다. 귀하의 상황은 신원 설정에 다소 특이한 점이 있습니다.

몇 년이 지난 후 이 주제를 다시 꺼냅니다. 🙂

어느 시점부터 이메일 주소를 (oauth2) SSO에서 _강제로_ 동기화하도록 변경했습니다. 따라서 그 방식으로 매칭할 _수_ 있을 것입니다. (그리고, 어떤 이유로든 불일치가 발생하더라도 이메일이 \_다른 사람\_에게 속하는 경우는 없어야 하므로, 최악의 경우에도 단순히 실패하는 것 외에는 문제가 되지 않겠죠?)

[WP Discourse](https://github.com/discourse/wp-discourse) 사용자 웹훅이 제대로 작동하도록 만들 수 있을까요?

그렇지 않다면… 저는 WP 전문가가 아니어서, 그리고 저희 WP는 호스팅되고 있으므로 플러그인을 커스터마이징할 수 있는 쉬운 옵션이 있는지 확실하지 않습니다.

CC @jwheel

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [5월 28, 2024, 3:09오후 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/5 "2024-05-28T15:09:10Z")

</div>

네, 확인 차 말씀드리면

> [@angus](#):
>
> - 워드프레스와 디스코스에서 이메일이 다른 사용자 하위 집합이 존재합니다.

이것이 더 이상 해당되지 않는다는 건가요?

> [@mattdm](#):
>
> [WP Discourse](https://github.com/discourse/wp-discourse) 사용자 웹훅을 그냥 작동하게 만들 수 있을까요?

현재는 정상적으로 작동하고 있다는 점 참고해 주세요. 새로운 기능을 요청하시는 것이죠 🙂

또한, 이 새로운 기능은 꽤 신중하게 고려해야 할 사항입니다. 몇 년 전에는 가능하다고 말씀드렸지만, 현재는 워드프레스에서 이메일 주소가 적절하게 검증된다는 전제를 해야 하므로, 이는 반드시 안전한 가정이 아니기에 플러그인의 핵심 기능으로 구현하는 데 다소 신중해지고 있습니다.

(워드프레스 이메일 검증)은 사이트 관리자의 책임이지만, 오픈 소스 개발의 원칙 중 하나는 환경에 대한 통제권이 없는 상황에서 일부 경우(아무리 작은 부분이라도) 나쁜 결과를 초래할 수 있는 것을 만들지 않는 것입니다. 이 문제는 여전히 존재하지만, [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)로만 제한되면 완화됩니다.

더 자세히 검토한 후 이번 주 안에 다시 알려드리겠습니다.

---

<div class="post-metadata">

### Author: ![mattdm](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mattdm/32/216484_2.png) [@mattdm](https://meta.discourse.org/u/mattdm)
#### Post date: [5월 29, 2024, 1:16오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/6 "2024-05-29T01:16:06Z")

</div>

이메일 매칭이 너무 복잡하다면, "Discourse 사용자 이름은 항상 WordPress와 일치한다(그리고 그 반대도 마찬가지)"는 _그렇게_ 드문 일이 아니지 않을까 하는 느낌이 듭니다.

고유한 사용자 이름을 전제로 하는 SSO 시스템을 사용하지 않는 경우에도, 수십 명의 WordPress 사용자를 가진 작은 사이트들 중에는 이것이 _관례상_ 참인 경우가 분명히 많을 것입니다.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [5월 29, 2024, 2:46오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/7 "2024-05-29T02:46:46Z")

</div>

> [@mattdm](#):
>
> 어느 시점에, 이메일 주소가 우리의 (oauth2) SSO에서 _강제로_ 동기화되도록 변경되었습니다. 따라서, 우리는 그 방식으로 매칭할 _수 있어야_ 합니다.

이 문제에 대한 기존 솔루션이 어느 정도 있습니다. Discourse를 WordPress의 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) 제공자로 구성할 수 있습니다(일반적인 구성과 반대입니다). 설정이 쉽습니다. 활성화되면, 사용자의 이메일 주소를 기반으로 WordPress/Discourse 계정을 동기화할 수 있는 선택 사항이 있습니다.

사용자 프로필 페이지에 링크가 추가되기도 합니다:

 ![image](https://global.discourse-cdn.com/meta/original/4X/8/a/3/8a30b1780c5b8e87d0479a5c2ff8047cc3cbf290.png)  
(수정: 이미지에 AI 없이 _캡션_을 달 수 있나요?)

지금 테스트 중인데, 프로필 페이지의 링크를 클릭해도 Discourse 사용자 이름 필드가 입력되지 않습니다. 입력되어야 합니다. 로그인 페이지에 추가할 수 있는 “Discourse로 로그인” 링크를 클릭하면 Discourse 사용자 이름 필드가 자동으로 업데이트됩니다.

계정 동기화의 목적은 보안 방식으로 Discourse 사용자 이름 필드를 업데이트하는 것이므로, 이 부분에 대해 살펴볼 가치가 있을 것입니다. 또한, WordPress에서 “미확인” 이메일 주소를 가진 계정이 Discourse와 계정을 동기화하는 것이 허용되는 문제도 있는 것으로 보입니다. 기본적으로는 이것이 허용되지 않아야 합니다.

귀하의 경우, 사용자가 Discourse를 통해 WordPress에 로그인하는 것을 허용하지 않으실 수 있습니다. 프로필 페이지의 링크만 사용하여 사용자가 계정을 동기화하도록 허용하여 Discourse 사용자 이름 필드가 자동으로 입력되도록 하면 됩니다. 이를 위해 Discourse를 통한 WordPress 로그인을 활성화할 필요는 없습니다.

이 접근 방식의 가능한 단점은 사용자가 직접 시작해야 한다는 것입니다. 관리자가 사용자의 Discourse 사용자 이름을 가져오기 위해 클릭할 수 있는 버튼을 제공하지는 않습니다.

---

<div class="post-metadata">

### Author: ![mattdm](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mattdm/32/216484_2.png) [@mattdm](https://meta.discourse.org/u/mattdm)
#### Post date: [6월 1, 2024, 3:32오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/8 "2024-06-01T03:32:44Z")

</div>

그건 좀 터무니없는 것 같습니다. 우리는 이미 중앙 집중식 SSO를 갖추고 있습니다. 서비스들이 함께 작동하도록 하려면 일부 서비스를 임의의 다른 서비스로 인증 제공자로 설정해야 한다는 건 말이 안 됩니다. 그건 미치광이가 되는 길입니다.

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [6월 1, 2024, 6:09오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/9 "2024-06-01T06:09:17Z")

</div>

> [@mattdm](#):
>
> 일부 서비스를 임의의 다른 서비스를 인증 제공자로 사용하도록 구성해야 하는 상황이어서는 안 됩니다.

이름(`DiscourseConnect`)에 현혹되지 마세요. 제가 설명한 기능이 정상적으로 작동한다면, 이는 WordPress 사용자가 이메일 주소가 일치하는 Discourse 계정이 있는지 확인하고, WordPress에서 Discourse 사용자 이름이 자동으로 입력되도록 하는 방법일 뿐입니다. 이는 사이트의 인증 시스템에 영향을 주지 않습니다.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [6월 3, 2024, 7:35오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/10 "2024-06-03T07:35:09Z")

</div>

핵심 플러그인에는 설정 옵션을 통해서도 워드프레스 사용자 이름과 디스커스 사용자 이름의 매칭 식별 메커니즘이 절대 도입되지 않을 것입니다. 이 맥락에서 유일한 가능성은 이메일 매칭입니다. 저는 사용자 웹훅에 이메일 매칭을 폴백 메커니즘으로 추가하기로 결정했습니다. 이 기능은 몇 주 안에 나올 다음 버전에서 제공됩니다.

---

<div class="post-metadata">

### Author: ![angus](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/angus/32/341715_2.png) [@angus](https://meta.discourse.org/u/angus)
#### Post date: [7월 2, 2024, 10:44오전 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/11 "2024-07-02T10:44:45Z")

</div>

이 문제를 마무리하기 위해, 플러그인의 최신 버전 `2.5.4`에는 Webhooks 관련 다양한 업데이트가 포함되어 있습니다. 여기에는 “Match Users by Email” 설정에 대한 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) 요구 사항을 제거하는 것도 포함됩니다. 자세한 내용은 아래를 참고하세요.

> [@WP Discourse 웹훅 설정하기](https://meta.discourse.org/t/configure-wp-discourse-webhooks/311552#update-userdata-7):
>
> You can use webhooks to sync data between Discourse and WordPress, and enrich your integration. Reply to this topic if you have questions about how to setup the webhooks, or how they work. Setup [WP Discourse](https://github.com/discourse/wp-discourse) First setup an endpoint in [WP Discourse](https://github.com/discourse/wp-discourse): Navigate to [WP Discourse](https://github.com/discourse/wp-discourse) \> Webhooks in Wordpress admin. Select the endpoint(s) you want to enable (see below). Set a “Webhook Secret Key”, if it’s not already set. Click “Save Options”. Discourse Then create a new Webhook in Discourse (Go to /admi…

---

<div class="post-metadata">

### Author: ![mattdm](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mattdm/32/216484_2.png) [@mattdm](https://meta.discourse.org/u/mattdm)
#### Post date: [7월 16, 2024, 5:17오후 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/12 "2024-07-16T17:17:37Z")

</div>

> [@angus](#):
>
> 이 부분을 마무리하기 위해 말씀드리면, 플러그인의 최신 버전인 `2.5.4`에는 웹훅(Webhooks)에 대한 여러 업데이트가 포함되어 있습니다. 여기에는 ‘이메일로 사용자 매칭’ 설정에 대한 [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true) 요구 사항이 제거된 내용도 있습니다. 자세한 내용은 아래를 참고하세요.

_생각컨대_ 이는 우리의 문제를 해결해 줄 것 같습니다. 적어도 99%의 경우에서는요. 감사합니다!!!

@jwheel 참고로 우리 사이트에서 이 기능을 켜 두었습니다.

---

<div class="post-metadata">

### Author: ![jwheel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jwheel/32/569377_2.png) [@jwheel](https://meta.discourse.org/u/jwheel)
#### Post date: [7월 16, 2024, 10:29오후 UTC](https://meta.discourse.org/t/filling-in-discourse-username-when-not-using-discourseconnect/212741/13 "2024-07-16T22:29:21Z")

</div>

좋아요, 플러그인 관련 향후 주제에 대해 주의를 기울일게요.
