# Discourse가 ID 제공자로 사용될 때 외부 사용자 ID를 저장하나요?

**URL:** https://meta.discourse.org/t/when-discourse-is-an-identity-provider-does-it-save-the-external-user-ids/290900
**Category:** SSO
**Tags:** rest-api
**Created:** [1월 8, 2024, 6:56오후 UTC](https://meta.discourse.org/t/when-discourse-is-an-identity-provider-does-it-save-the-external-user-ids/290900 "2024-01-08T18:56:09Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![wilson29thid](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/wilson29thid/32/173700_2.png) [@wilson29thid](https://meta.discourse.org/u/wilson29thid)
#### Post date: [1월 8, 2024, 6:56오후 UTC](https://meta.discourse.org/t/when-discourse-is-an-identity-provider-does-it-save-the-external-user-ids/290900/1 "2024-01-08T18:56:09Z")

</div>

저는 Rails 애플리케이션에 대해 [Discourse를 ID 제공자(Identity Provider)로 사용](https://meta.discourse.org/t/use-discourse-as-an-identity-provider-sso-discourseconnect/32974)하고 있습니다(즉, Discourse 로그인으로 내 Rails 앱에 로그인하는 방식이지, 그 반대는 아닙니다). Discourse의 사용자 프로필 페이지에 링크를 추가하여 해당 사용자의 Rails 앱 내 프로필로 이동하게 하고 싶습니다. 이를 위해 Discourse는 내 Rails 애플리케이션/데이터베이스에서 해당 사용자의 사용자 ID를 알아야 합니다.

[DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)는 _반대 방향_(다른 로그인으로 Discourse에 로그인)일 때 'external\_id’를 저장한다는 것은 알고 있습니다. 하지만 이 경우(내 방식)에는 어떤 것이 저장됩니까?

저장되지 않는다면, 이를 저장하는 방법에 대한 조언이 있을까요?

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [1월 8, 2024, 7:08오후 UTC](https://meta.discourse.org/t/when-discourse-is-an-identity-provider-does-it-save-the-external-user-ids/290900/2 "2024-01-08T19:08:41Z")

</div>

> [@wilson29thid](#):
>
> 하지만 이렇게 하면 무언가를 절약할 수 있을까요?

아니요, 따라서 커스텀 솔루션이 필요합니다.

사용자의 Discourse ID를 알고 있으므로, 이 부분을 Rails 앱에서 처리하는 것이 더 합리적일 수 있을 것 같네요.

`/profile-by-discourse-id/:discourse_id`와 같은 라우트를 설정하여 Discourse ID에 해당하는 사용자를 조회한 후, Rails 앱 내 해당 사용자의 프로필로 리다이렉트할 수 있습니다.

---

<div class="post-metadata">

### Author: ![wilson29thid](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/wilson29thid/32/173700_2.png) [@wilson29thid](https://meta.discourse.org/u/wilson29thid)
#### Post date: [1월 9, 2024, 2:43오후 UTC](https://meta.discourse.org/t/when-discourse-is-an-identity-provider-does-it-save-the-external-user-ids/290900/3 "2024-01-09T14:43:54Z")

</div>

감사합니다, @david. 우연히도 다른 방향의 링크(내 Rails 앱 사용자 프로필에서 Discourse 사용자 프로필로)를 설정할 때 정확히 이렇게 했어요. [이 Discourse 플러그인](https://meta.discourse.org/t/user-profile-by-id-instead-of-username/185394)(`/user-by-id/123/summary`)을 사용했는데, 내 Rails 앱에서는 사용자명이 변경될 수 있으므로 사용자명 대신 Discourse 사용자 ID를 저장하기 때문입니다.

해당 솔루션은 반대 방향에서는 잘 작동할 수 있지만, 내 Rails 앱에 사용자 프로필이 있는 사용자가 포럼의 모든 사용자가 아니라는 점이 문제입니다. Discourse 사용자가 조직에 '가입’할 때만 Rails 사용자가 생성되므로, Discourse 포럼에는 비회원도 존재할 수 있습니다.

따라서 제 선택지는 두 가지인 것 같습니다:

A) Discourse 사용자가 Rails 앱에서도 사용자인지 확인하기 위해 내 Rails 앱으로 ajax 요청을 보내는 JavaScript 플러그인을 만들고, 해당 조건이 충족되면 링크를 렌더링하는 방법;

B) Rails 앱 사용자가 생성되어 Discourse 사용자와 연결되는 시점에, Rails 앱 데이터베이스에 Discourse 사용자 ID를 저장하는 것 외에도, Discourse 사용자 프로필에 Rails 사용자 ID를 저장하는 방법(예: 사용자 정의 필드로).

(사용자 정의 필드가 관리자만 수정할 수 있다면) (B)가 더 나은 해결책이라고 느끼지만, 사용자 정의 필드에 익숙하지 않고 API를 통해 접근 가능한지 여부는 잘 모르겠습니다.

수정: 마지막으로 이 문제를 조사했을 때를 이제야 기억났는데, 문제는 사용자 정의 필드가 사용자가 직접 수정할 수 있다는 점입니다. 이 때문에 시스템이 생성한 참조 값(이러한 ID 등)을 저장하는 곳으로 적합하지 않아요 😕
