# 사용자에게 초대장을 보내고 프로필을 프로그래밍 방식으로 완성하기

**URL:** https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227
**Category:** Support
**Created:** [11월 25, 2020, 12:03오전 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227 "2020-11-25T00:03:07Z")
**Posts on this page:** 10
**Page:** 1

<div class="post-metadata">

### Author: ![eatcodetravel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eatcodetravel/32/94385_2.png) [@eatcodetravel](https://meta.discourse.org/u/eatcodetravel)
#### Post date: [11월 25, 2020, 12:03오전 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/1 "2020-11-25T00:03:08Z")

</div>

안녕하세요!

우리는 앱에서 계정을 생성한 사용자에게 Discourse 초대장을 보내고 있습니다. 이미 커뮤니티에 필요한 사용자 이름과 사용자 정의 필드를 보유하고 있지만, 사용자가 Discourse에서 이 정보를 다시 입력해야 합니다.

프로필의 해당 필드를 자동으로 채워 넣을 수 있는 방법이 있을까요?

감사합니다!

---

<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: [11월 25, 2020, 12:05오전 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/2 "2020-11-25T00:05:53Z")

</div>

앱을 SSO 서버로 사용하는 것이 가장 좋다고 생각합니다. 그렇게 하지 않으려면, 앱을 통해 API로 사용자를 생성하고 해당 설정을 포함할 수 있습니다. [Discourse API 역공학 방법](https://meta.discourse.org/t/how-to-reverse-engineer-the-discourse-api/20576)에서 방법을 알아볼 수 있습니다.

---

<div class="post-metadata">

### Author: ![eatcodetravel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eatcodetravel/32/94385_2.png) [@eatcodetravel](https://meta.discourse.org/u/eatcodetravel)
#### Post date: [11월 25, 2020, 12:19오전 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/3 "2020-11-25T00:19:36Z")

</div>

API를 통해 사용자를 생성하는 것은 원치 않습니다. 사용자가 직접 비밀번호를 설정하고 사용자 이름을 선택하도록 하고 싶기 때문입니다. 모든 데이터를 포함하여 단계별 사용자를 생성하는 방법을 조사해 보았지만, API를 통해 이를 구현하는 것은 불가능한 것으로 보입니다.

고려할 수 있는 다른 옵션은 초대 기능을 확장하여 커스텀 필드와 프로필 정보를 허용하는 것입니다.

---

<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: [11월 25, 2020, 12:23오전 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/4 "2020-11-25T00:23:38Z")

</div>

웹훅/API 호출을 통해 앱에서 필드를 가져오는 플러그인이 어떨까요? 플러그인이 `get yoursite/user/<email_address>`와 같은 요청을 수행하고, 사용자 레코드가 업데이트될 때 사용자 필드를 채워 넣도록 할 수 있습니다. 그런 식으로요. 그래도 SSO가 여전히 가장 좋은 해결책인 것 같습니다.

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [11월 25, 2020, 11:55오후 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/5 "2020-11-25T23:55:04Z")

</div>

> [@pfaffman](#):
>
> SSO가 여전히 최선의 해결책인 것 같습니다.

네, [https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/13045를](https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/13045%EB%A5%BC) 확인해 보세요. 이것이 단일 로그인(SSO)의 정확한 사용 사례입니다.

다만 SSO를 사용하면 사용자를 초대할 필요가 없습니다. 이미 애플리케이션에 로그인되어 있는 경우, 해당 사용자는 discourse 인스턴스를 방문하면 자동으로 로그인됩니다. 만약 애플리케이션에 로그인되어 있지 않은 경우, discourse가 로그인을 위해 해당 애플리케이션으로 리다이렉트한 후, 사용자는 자동으로 discourse로 다시 리다이렉트됩니다.

---

<div class="post-metadata">

### Author: ![eatcodetravel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eatcodetravel/32/94385_2.png) [@eatcodetravel](https://meta.discourse.org/u/eatcodetravel)
#### Post date: [11월 25, 2020, 11:58오후 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/6 "2020-11-25T23:58:57Z")

</div>

문제는 우리가 Discourse를 SSO 제공자로 사용하고 있으며, 지금까지 잘 작동해 왔다는 점입니다. 하지만 그렇다고 해서 Discourse가 SSO 제공자를 소비하는 쪽이 더 쉬울 것이라는 데에는 동의합니다.

---

<div class="post-metadata">

### Author: ![eatcodetravel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eatcodetravel/32/94385_2.png) [@eatcodetravel](https://meta.discourse.org/u/eatcodetravel)
#### Post date: [12월 9, 2020, 5:48오후 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/8 "2020-12-09T17:48:38Z")

</div>

@blake SSO 제공자로 Discourse를 사용 중이므로, 이를 어떻게 진행할지 아직 고민하고 있습니다. 지금은 다른 서비스로 마이그레이션하는 것은 현재 설정을 많이 변경해야 해서 원하지 않습니다. 다른 아이디어가 있으신가요? 커스텀 코드를 작성해야 하는 것은 문제가 되지 않지만, 기존 설정을 최소한으로 변경하고 싶습니다.

감사합니다!

---

<div class="post-metadata">

### Author: ![blake](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/blake/32/157322_2.png) [@blake](https://meta.discourse.org/u/blake)
#### Post date: [12월 10, 2020, 3:20오후 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/9 "2020-12-10T15:20:45Z")

</div>

현재 설정과 이 두 문장 때문에 혼란스럽습니다. 이렇게 하면 **단일** 로그인(Single-sign-on)이 아니라 이중 로그인(double-sign-on)이 되는 것 아닌가요?

> [@eatcodetravel](#):
>
> 우리는 사용자가 우리 앱에서 계정을 생성하면 그들에게 Discourse 초대장을 보내고 있습니다.

> [@eatcodetravel](#):
>
> 문제는 우리가 Discourse를 SSO 제공자로 사용하고 있다는 것입니다.

만약 Discourse가 SSO 제공자라면, 앱의 신규 사용자는 먼저 계정을 만들기 위해 Discourse로 리다이렉트되고, 인증이 완료된 후 다시 앱으로 리다이렉트되어야 합니다. 이렇게 하면 모든 정보가 한 곳에 모입니다.

> [@eatcodetravel](#):
>
> 커스텀 코드를 작성해야 하는 것은 문제가 되지 않습니다.

현재 제 이해를 바탕으로 하면, 앱을 SSO 제공자로 전환하고 Discourse가 이를 소비하도록 하는 것이 좋겠습니다. 또는 사용자를 먼저 Discourse에서 가입하도록 리다이렉트하고 다시 앱으로 돌려보내는 방식도 가능합니다. 현재 설정이 그렇게 되어 있지 않은 것 같아서요?

그렇지 않다면, 이중 로그인 설정을 원하신다면 사용자가 앱에서 가입할 때 API를 통해 자동으로 Discourse에 사용자를 생성하고, 사용자에게 절대 알려주지 않는 랜덤 비밀번호를 설정하며, 앱에서 입력한 프로필 정보를 자동으로 채워 넣으세요. 그리고 초대장을 보내는 대신, 새 계정에 대해 Discourse의 비밀번호 재설정 페이지로 보내세요.

---

<div class="post-metadata">

### Author: ![eatcodetravel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/eatcodetravel/32/94385_2.png) [@eatcodetravel](https://meta.discourse.org/u/eatcodetravel)
#### Post date: [12월 10, 2020, 6:19오후 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/10 "2020-12-10T18:19:54Z")

</div>

> [@blake](#):
>
> 여러분의 설정과 이 두 문장 때문에 혼란스럽습니다. 그러면 사실상 **Single** -sign-on이 아니라 double-sign-on이 되는 것 아닌가요?

우리는 앱을 통해 등록을 처리하지만, 우리 앱에는 세션 관리 기능이 없습니다. 우리는 단순히 사용자에게 과금하고 그들의 정보를 데이터베이스에 저장할 뿐입니다.

> [@blake](#):
>
> 만약 Discourse가 여러분의 SSO라면, 여러분의 앱의 신규 사용자는 먼저 계정을 만들기 위해 Discourse로 리다이렉트되고, 인증이 완료된 후 여러분의 앱으로 다시 리다이렉트되어야 합니다. 그러면 모든 정보가 한 곳에 모이게 됩니다.

우리는 사용자가 먼저 계정을 생성하도록 요구해야 하며, 우리가 제거하려는 단계가 바로 이것입니다. 우리는 가능한 한 프로세스를 간편하게 만들고 싶습니다.

> [@blake](#):
>
> 그렇다면 제 현재 이해도에 따르면, 여러분의 앱을 SSO 제공자로 전환하고 Discourse가 이를 소비하도록 하는 것이 좋겠습니다. 또는 현재 그렇게 설정되어 있지 않은 것 같은데, 여러분의 앱 사용자를 먼저 Discourse에서 가입하도록 유도하고 여러분의 앱으로 다시 리다이렉트하는 방식도 가능합니다.

이것은 우리가 투입하고 싶지 않은 노력입니다. 세션 관리, 비밀번호 복구, 2FA 인증 및 Discourse가 제공하는 모든 기능을 추가하는 데는 상당한 작업이 필요합니다.

> [@blake](#):
>
> 그렇지 않고 듀얼-사인온(dual-sign-on) 설정을 원한다면

우리는 이것이 원하지 않는 방식입니다.

> [@blake](#):
>
> API를 통해 자동으로 Discourse에서 사용자로 생성하고, 사용자에게 절대 알려주지 않는 랜덤 비밀번호를 설정하며, 여러분의 앱에서 입력한 프로필 정보를 자동으로 채워 넣으세요.

처음에는 이렇게 하였습니다. 하지만 랜덤 사용자명을 설정해야 하며, 이는 우리가 원하는 방식이 아닙니다. 작동은 하겠지만, 커뮤니티를 사용하기 전에 사용자가 자신의 계정을 개인화할 수 있도록 하고 싶습니다.

하지만 네, 결국 답은 외부 SSO 제공자를 사용하는 것 같습니다. 이 방향으로 진행할 것이며, Discourse를 활용하여 우리가 원하는 방식으로 작동하게 하려는 고민을 그만두겠습니다.

도움 주셔서 감사합니다 @blake!

---

<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: [12월 10, 2020, 8:58오후 UTC](https://meta.discourse.org/t/send-an-invite-to-a-user-but-complete-their-profile-programmatically/171227/11 "2020-12-10T20:58:25Z")

</div>

아니면 앱을 없애고 [Discourse Subscriptions](https://meta.discourse.org/t/discourse-subscriptions/140818)로 결제 관리를 맡기시는 건 어떨까요?
