# SSO에서 이메일 인증 비활성화

**URL:** https://meta.discourse.org/t/disable-email-verification-for-sso/148086
**Category:** Support
**Created:** [4월 15, 2020, 8:37오전 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086 "2020-04-15T08:37:56Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![mat-mcloughlin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mat-mcloughlin/32/176984_2.png) [@mat-mcloughlin](https://meta.discourse.org/u/mat-mcloughlin)
#### Post date: [4월 15, 2020, 8:37오전 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/1 "2020-04-15T08:37:56Z")

</div>

안녕하세요,

저는 Discourse를 설정하여 Auth0를 SSO 제공자로 사용하도록 했습니다. 그런데 문제가 하나 있습니다. 사용자가 가입할 때 인증 메일이 두 통이 발송됩니다. 하나는 Auth0에서, 다른 하나는 Discourse에서 발송됩니다.

Discourse에서 발송되는 인증 메일을 비활성화할 방법이 있을까요?

미리 감사드립니다.

---

<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: [4월 15, 2020, 5:32오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/2 "2020-04-15T17:32:33Z")

</div>

> [@mat-mcloughlin](#):
>
> 제가 겪는 문제는 사용자가 가입할 때 인증 이메일이 두 통씩 도착한다는 것입니다. 하나는 Auth0에서, 다른 하나는 Discourse에서 발송됩니다.

이메일 주소가 Auth0에 의해 인증되는 경우, `oauth2 email verified` 사이트 설정을 선택하여 Discourse 인증 이메일을 비활성화할 수 있습니다. 해당 설정에 대한 참조가 있는 게시글은 다음과 같습니다: [Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin - #33 by blake](https://meta.discourse.org/t/how-to-use-auth0-with-the-oauth2-basic-plugin/64633/33).

---

<div class="post-metadata">

### Author: ![mat-mcloughlin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mat-mcloughlin/32/176984_2.png) [@mat-mcloughlin](https://meta.discourse.org/u/mat-mcloughlin)
#### Post date: [4월 15, 2020, 5:37오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/3 "2020-04-15T17:37:52Z")

</div>

@simon님 답변 감사합니다. 하지만 저는 OAuth2가 아니라 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: [4월 15, 2020, 6:00오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/4 "2020-04-15T18:00:05Z")

</div>

> [@mat-mcloughlin](#):
>
> Auth0를 SSO 제공자로 사용하여 Discourse를 설정했습니다.

> [@mat-mcloughlin](#):
>
> 하지만 저는 OAuth2가 아닌 SSO를 사용하고 있습니다.

SSO라는 용어는 몇 가지 다른 인증 방식에 대해 사용됩니다. 이로 인해 과거에 몇 번의 혼란이 발생했습니다.

[Discourse의 SSO 구현](https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/13045)을 사용하고 있다면, 이메일 인증은 `require_activation` SSO 파라미터에 의해 제어됩니다. 이메일 인증을 우회하려면 해당 파라미터를 `"false"`로 설정하세요.

---

<div class="post-metadata">

### Author: ![mat-mcloughlin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mat-mcloughlin/32/176984_2.png) [@mat-mcloughlin](https://meta.discourse.org/u/mat-mcloughlin)
#### Post date: [4월 15, 2020, 6:25오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/5 "2020-04-15T18:25:54Z")

</div>

다시 한번 @simon 님 감사합니다.

기능을 완전히 비활성화하는 것은 피하고 싶습니다. 현재 `require_activation`이 auth0로 인증되었는지에 따라 true 또는 false를 반환하도록 설정해 두었습니다. 이 방식은 잘 작동하며, auth0 이메일을 클릭한 후 다음 로그인 시 discourse에서 인증이 완료됩니다.

따라서 이상적으로는 이메일 전송을 억제하는 것만 하면 될 것 같습니다. 제가 놓친 부분이 있다면 알려주세요.

---

<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: [4월 15, 2020, 6:41오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/6 "2020-04-15T18:41:54Z")

</div>

> [@mat-mcloughlin](#):
>
> 현재 `require_activation`이 auth0에 의해 인증되었는지에 따라 true 또는 false를 반환하도록 설정해 두었습니다.

그렇군요. 저희 WordPress 플러그인도 이메일 인증을 같은 방식으로 처리합니다.

Discourse에서 `require_activation` 값이 어떻게 사용되는지 확인하려면 이 파일을 살펴보세요: [https://github.com/discourse/discourse/blob/master/app/models/discourse\_single\_sign\_on.rb#L81](https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L81). SSO를 통해 사용자가 처음 생성될 때 `require_activation`이 `"false"`로 설정되어 있으면, Discourse가 활성(active) 상태의 사용자를 생성합니다. `"true"`로 설정되어 있으면, 사용자가 Discourse 활성화 이메일의 링크를 클릭할 때까지 활성화되지 않습니다.

Discourse에서 사용자가 `active` 상태로 설정된 후에는, `sso_overrides_email` 사이트 설정을 활성화해 두었고 사용자가 SSO 제공업체 사이트에서 이메일 주소를 변경한 경우에만 사용자가 다시 활성화되어야 하는 상황이 발생할 수 있습니다.

`"true"`로 설정된 경우, `require_activation`은 이메일 주소를 기준으로 기존 사용자와 외부 사이트의 사용자를 일치시키는 것을 Discourse에서 방지합니다. 이는 사용자가 이미 사용자명/비밀번호 방식으로 사이트에 생성된 후에 SSO가 구현된 경우 문제를 일으킬 수 있습니다.

---

<div class="post-metadata">

### Author: ![mat-mcloughlin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mat-mcloughlin/32/176984_2.png) [@mat-mcloughlin](https://meta.discourse.org/u/mat-mcloughlin)
#### Post date: [4월 15, 2020, 6:52오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/7 "2020-04-15T18:52:08Z")

</div>

그렇게 하면 이해가 갑니다. 하지만 Discourse에서 발송되는 “이메일 인증” 메일을 어떻게 막는지 잘 모르겠어요.

저는 auth0에서 발송되는 메일만 보내지 싶습니다.

---

<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: [4월 15, 2020, 7:16오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/8 "2020-04-15T19:16:59Z")

</div>

인증 이메일이 SSO 제공자 사이트에서만 발송되려면, 사용자가 Discourse에 처음 로그인하기 _전에_ 해당 사이트에 가입하고 이메일 주소를 인증해야 합니다. 그러면 해당 사용자의 `require_activation` 매개변수를 `"false"`로 설정할 수 있습니다. 이렇게 하면 사용자는 Discourse에서 활성 상태로 생성되며, Discourse 활성화 이메일을 받지 않게 됩니다.

---

<div class="post-metadata">

### Author: ![staskjs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/staskjs/32/234231_2.png) [@staskjs](https://meta.discourse.org/u/staskjs)
#### Post date: [9월 16, 2021, 12:49오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/9 "2021-09-16T12:49:10Z")

</div>

이건 말이 안 되네요. Discourse에서 첫 로그인 전에 이메일 인증을 어떻게 하게 할 수 있나요?  
제 웹사이트에서는 이미 이메일 인증을 처리하고 있는데, Discourse가 인증 이메일을 보내지 않도록 하되, 사용자가 인증이 필요하다는 메시지를 보도록 하는 방법은 무엇인가요?

---

<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: [9월 16, 2021, 4:29오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/10 "2021-09-16T16:29:22Z")

</div>

> [@staskjs](#):
>
> Discourse에 처음 로그인하기 전에 이메일을 확인하도록 어떻게 해야 하나요?  
> 제 웹사이트에서는 이미 이메일 확인 절차를 처리하고 있습니다.

[DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)는 웹사이트에서 이메일 주소를 검증하고 있다고 가정합니다. 이메일 주소를 검증하고 있다면, SSO 페이로드에 `require_activation` 매개변수를 설정하지 마세요. 페이로드에 해당 매개변수가 없으면 활성화 이메일이 전송되지 않고 사용자가 Discourse에 로그인됩니다.

---

<div class="post-metadata">

### Author: ![staskjs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/staskjs/32/234231_2.png) [@staskjs](https://meta.discourse.org/u/staskjs)
#### Post date: [9월 16, 2021, 5:54오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/11 "2021-09-16T17:54:12Z")

</div>

네, 하지만 그러면 Discourse가 이미 검증된 것으로 간주하게 되는데, 사용자가 포럼에 접속한 후 이메일 검증을 잊거나 검증을 진행하지 않기로 결정한 경우라면 사실과 다를 수 있습니다. 웹사이트가 `require_validation`을 true로 설정하면, 사용자가 웹사이트에서 이메일을 아직 검증하지 않았다는 의미이지만, 검증 링크는 확실히 받은 상태이므로 Discourse가 다시 보내줄 필요가 없습니다. 하지만 이 파라미터 때문에 Discourse가 다시 보내게 됩니다.

기본적으로 이 문제는 사용자가 검증을 완료하기 전에 Discourse에 접속할 때만 발생합니다. 따라서 현재로서는 두 가지 옵션 중 하나를 선택해야 합니다:

1. 사용자가 검증 이메일을 하나만 받지만, Discourse에서는 검증된 사용자로 취급됩니다. 이는 사용자가 검증을 완료하지 않을 수 있으므로 이상적이지 않습니다.
2. 사용자가 검증 이메일을 두 번 받지만, 포럼과 웹사이트 모두에서 올바르게 검증됩니다. 이 옵션도 이상적이지는 않지만, 두 가지 중에서는 확실히 더 나은 선택지입니다.

세 번째 옵션도 있습니다: SSO가 활성화된 경우에만 작동하는 스위치를 추가하여 Discourse의 검증 이메일 전송을 비활성화하는 것입니다(다만, 사용자가 검증되지 않았음을 알려주는 오류 페이지는 유지합니다).

---

<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: [9월 16, 2021, 6:02오후 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/12 "2021-09-16T18:02:50Z")

</div>

> [@staskjs](#):
>
> 네, 하지만 그러면 Discourse는 이메일이 인증된 것으로 간주하게 되며, 사용자가 포럼에 방문했다가 이메일 인증을 잊거나 인증하지 않기로 결정한 경우 이는 사실이 아닐 수 있습니다.

이상적으로는 사용자가 웹사이트에서 계정을 생성할 때, 사용자가 가입할 때 _웹사이트에서_ 발송되는 활성화 이메일에 응답하도록 하여 이메일 주소를 인증해야 합니다. 만약 어떤 이유로든 사용자가 이메일 주소를 인증하기 전에 웹사이트에서 계정을 생성할 수 있도록 허용하는 경우, SSO 페이로드에서 `require_validation` 매개변수를 조건부로 설정할 수 있습니다. 사용자가 이메일 주소를 인증했다면 `require_validation`을 `false`로 설정하거나 페이로드에서 해당 매개변수를 생략하면 됩니다. 사용자가 웹사이트에서 이메일 주소를 인증하지 않았다면, Discourse에서 활성화 이메일이 발송되도록 `require_activation` 매개변수를 `true`로 설정해야 합니다.

---

<div class="post-metadata">

### Author: ![staskjs](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/staskjs/32/234231_2.png) [@staskjs](https://meta.discourse.org/u/staskjs)
#### Post date: [9월 17, 2021, 9:26오전 UTC](https://meta.discourse.org/t/disable-email-verification-for-sso/148086/13 "2021-09-17T09:26:47Z")

</div>

제가 정확히 그렇게 하고 있고, 이것이 문제입니다. 예를 들어, 사용자가 가입한 후 웹사이트에서 활성화 이메일을 받지만, 이를 열어 활성화하는 대신 그냥 Discourse로 접속합니다. 왜 그러냐고요? 그냥 그러고 싶어서요. 그러면 아직 활성화되지 않은 상태이므로 `require_activation`이 true로 설정됩니다. 하지만 Discourse는 사용자에게 또 다른 활성화 이메일이 필요하다고 판단하게 되는데, 이는 웹사이트에서 온 활성화 이메일이 이미 열기만을 기다리고 있는 상황에서 문제가 됩니다. Discourse는 사용자가 이메일함을 확인하라는 오류 메시지를 표시하는 것만 하면 됩니다.
