# 여러 사용자의 User JS 객체 \`groups\` 배열이 값이 채워지지 않음

**URL:** https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520
**Category:** Development
**Created:** [4월 13, 2023, 2:02오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520 "2023-04-13T02:02:24Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![smileBeda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/smilebeda/32/272497_2.png) [@smileBeda](https://meta.discourse.org/u/smileBeda)
#### Post date: [4월 13, 2023, 2:02오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/1 "2023-04-13T02:02:24Z")

</div>

현재 사용자의 소속 그룹을 확인하기 위해 Discourse JS User Object를 사용하고 있습니다.

일부 사용자의 경우, User JS Object의 `groups` 배열이 각 그룹에 대한 설명을 담은 객체의 배열로 정상적으로 반환됩니다. 예시:

```plaintext
groups: Array (5)
0 {
  id: 1, 
  name: "admins", 
  has_messages: false
}
1 {
  id: 46, 
  name: "custom-group", 
  has_messages: false
}
2 {
  id: 3, 
  name: "staff", 
  has_messages: false
}
3 {
  id: 10, 
  name: "trust_level_0", 
  has_messages: false
}
4 {
  id: 11, 
  name: "trust_level_1", 
  has_messages: false
}

```

그러나 \_대부분\_의 사용자의 경우, `groups` 배열은 단순히 비어 있습니다 (0).  
해당 사용자들은 _실제로_ 그룹의 멤버이므로, 왜 이런 일이 발생하는지 이해할 수 없습니다.  
"기본(primary) 그룹"과 관련이 있는지 확인해 보았지만, `groups` 배열이 _있는_ 사용자들도 _어떤_ 기본 그룹에도 속해 있지 않으므로 이것이 문제가 되는 것은 아닙니다.

사용자 로그인을 처리하기 위해 WP SSO Connection을 사용하고 있습니다. 따라서 사용자는 WP 인스턴스에서 로그인하며, Discourse 인스턴스는 기본적으로 WP의 "슬레이브(slave)

---

<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: [4월 13, 2023, 2:17오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/2 "2023-04-13T02:17:35Z")

</div>

> [@smileBeda](#):
>
> 이런 일이 왜 발생하는지 찾아볼 수 있는 사람이 있을까요?

현재 로그인된 사용자를 위한 세션 엔드포인트(`session/current`)를 사용하고 있습니다. 이 엔드포인트를 통해 “자동” 그룹(예: 신뢰 수준 그룹)을 받는 것은 스태프 멤버만 가능합니다.

이와 관련된 예시로 [https://meta.discourse.org/g](https://meta.discourse.org/g)를 확인해 보세요. 엔드포인트는 다르지만 동일한 원리가 적용됩니다. 이 포럼의 스태프 멤버가 아니기 때문에 메타(meta)에서 모든 신뢰 수준 그룹을 볼 수 없다는 것을 확인할 수 있습니다.

모든 사용자 그룹, 특히 자동 그룹을 포함하여 모든 그룹을 가져오려면 API 키를 사용한 인증된 요청이 필요합니다. 이 자바스크립트가 워드프레스에서 실행되고 있다면, 이를 위해 [WP Discourse](https://github.com/discourse/wp-discourse) 유틸리티 함수를 사용할 수 있습니다. 관리 인터페이스에서 제공한 API 키를 사용하여 요청을 수행하게 됩니다.

---

<div class="post-metadata">

### Author: ![Lhc\_fl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lhc_fl/32/268115_2.png) [@Lhc\_fl](https://meta.discourse.org/u/Lhc_fl)
#### Post date: [4월 13, 2023, 3:11오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/3 "2023-04-13T03:11:32Z")

</div>

정말요? 그렇게 복잡할 거라고 생각하지 않는데요?

 ![image](https://global.discourse-cdn.com/meta/original/4X/8/2/e/82ed11a1f159cf4afa550749e6f7ed757a46b6cb.png)  
이것은 `await $.ajax("/u/Lhc_fl.json")`에서 가져온 것입니다.  
물론 저는 메타의 스태프는 아니지만, 제 “자동” 그룹을 볼 수 있습니다

---

<div class="post-metadata">

### Author: ![smileBeda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/smilebeda/32/272497_2.png) [@smileBeda](https://meta.discourse.org/u/smileBeda)
#### Post date: [4월 13, 2023, 3:51오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/4 "2023-04-13T03:51:29Z")

</div>

@Lhc_fl, 당신이 한 일은 현재 사용자의 사용자 이름(내 생각엔 내가 사용하는 것과 같은 AJAX로?)을 가져온 다음, 해당 사용자의 JSON으로 또 다른 AJAX 요청을 보내고, 거기서 그룹을 가져온 것이군요.

@angus의 접근 방식도 마음에 듭니다. 다만 제 코드는 discourse 쪽에 있긴 하죠… 그냥 동일한 API 키를 사용해서 인증하면 될까요?

`withCredentials`를 사용하므로, 코드는 사용자가 인증된 경우에만 실행되고, 데이터가 항상 동일할 것이라고 가정했습니다.

데이터가 왜 동일한지 모르겠습니다. 사용자가 속한 \_그룹\_을 전달하는 것이 보안상의 우려 사항인가요? 제가 보는 바로는, 실제 그룹 데이터나 해당 그룹의 다른 사용자를 전달하는 것은 아닙니다.

어쨌든, 제안된 접근 방식을 시도해 보겠습니다…

감사합니다!

---

<div class="post-metadata">

### Author: ![Lhc\_fl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lhc_fl/32/268115_2.png) [@Lhc\_fl](https://meta.discourse.org/u/Lhc_fl)
#### Post date: [4월 13, 2023, 4:18오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/5 "2023-04-13T04:18:53Z")

</div>

Discourse용 컴포넌트를 개발 중이시라면… 가장 쉬운 방법은 Discourse API를 사용하는 것입니다. 클라이언트를 개발 중이시라면, 사용자 이름은 이미 오래전에 알려져 있어야 하지 않나요?

전자의 경우, 아래에 예시를 드립니다;

```plaintext
require("discourse/lib/plugin-api").withPluginApi("1.0.0", (api)=>{console.log(api.currentUser())});

```

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [4월 13, 2023, 4:35오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/6 "2023-04-13T04:35:29Z")

</div>

현재 사용자 객체에 액세스할 수 있으며, 이를 통해 사용자가 자신이 속해 있다고 인식하는 그룹을 확인할 수 있습니다. 이 객체는 모든 사용자에게 이미 로드되어 있으므로, 현재 사용자를 참조하는 다른 테마와 동일한 방식으로 플러그인 API에 액세스할 수 있습니다. [Theme Developer Quick Reference Guide](https://meta.discourse.org/t/theme-developer-quick-reference-guide/110448)를 참고하고 주변을 둘러보시면 예시를 찾을 수 있습니다.

이 주제와 관련된 권장 주제에도 예시가 있습니다: [currentUser.groups doesn't match group\_users table](https://meta.discourse.org/t/currentuser-groups-doesnt-match-group-users-table/196146?u=pfaffman)

---

<div class="post-metadata">

### Author: ![smileBeda](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/smilebeda/32/272497_2.png) [@smileBeda](https://meta.discourse.org/u/smileBeda)
#### Post date: [4월 13, 2023, 6:27오전 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/7 "2023-04-13T06:27:36Z")

</div>

모두 감사합니다

이 특정 인스턴스에서 `groups`는 여전히 비어 있습니다(현재 세션 대신 사용자 API를 사용해도 마찬가지입니다). 하지만 `group_users`에서 그룹 \_ID\_를 확인하는 방식으로 이 문제를 해결할 수 있었습니다. 이 테이블도 동일한 데이터를 저장하지만 이름이 아닌 ID를 사용하거든요.

저는 원래 접근 방식을 데이터 가져오기에 사용했습니다. 이 코드는 테마나 플러그인이 아니라 Discourse에 `head` 스크립트로 추가된 스니펫일 뿐이거든요.

실제 `api`는 작동하지 않았지만, AJAX 방식은 제가 필요한 용도에는 똑같이 잘 작동했습니다.

다시 한번 모두의 의견에 감사드립니다. 특히 제 경우에 맞는 올바른 해결책을 찾아주신 @Lhc\_fl님께 감사드립니다.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [4월 24, 2023, 1:00오후 UTC](https://meta.discourse.org/t/user-js-object-groups-array-not-populated-for-several-users/261520/10 "2023-04-24T13:00:51Z")

</div>

이 주제는 11일 후 자동으로 닫혔습니다. 새로운 답변은 더 이상 허용되지 않습니다.
