WP Discourse와 DiscourseConnect로 단일 로그인(SSO) 구성하기

WP Discourse 플러그인을 사용하면 WordPress에서 DiscourseConnect를 설정하여 사용자가 WordPress 계정으로 Discourse에 로그인하거나, Discourse 계정으로 WordPress에 로그인할 수 있습니다. DiscourseConnect를 설정하기 전에 먼저 WordPress에 WP Discourse 플러그인을 설치하고 Discourse와 연결해야 합니다. 시작할 준비가 되었다면, 먼저 이 짧은 영상을 시청하시거나 아래 지침을 따르세요.

다음 단계

DiscourseConnect를 설정한 후에는 다음 주제를 확인해 보시는 것이 좋습니다.


지침

시크릿 키 설정

WP Discourse를 DiscourseConnect 제공자(Provider) 또는 클라이언트(Client)로 설정하든, 시크릿 키를 설정해야 합니다. “DiscourseConnect Secret Key” 탭으로 이동하여 문자열(숫자, 문자, 기호 모두 허용)을 입력하세요. 길이는 최소 10자 이상이어야 합니다. 이 키를 만들 때 강력한 비밀번호를 만들 때 사용하는 것과 동일한 규칙을 따르세요. 완료 후 저장했는지 확인하세요.

그 다음, Discourse 사이트 설정(관리자 패널)을 열고 "discourse connect"를 검색하세요. 상단 근처의 설정 중 하나가 discourse connect secret입니다. WP Discourse에서 설정한 시크릿 키를 여기에 붙여넣고 녹색 체크 표시를 클릭하세요.

WordPress로 Discourse 로그인 (DiscourseConnect Provider)

아래 지침을 따르기 전에 WP Discourse가 Discourse와 연결되어 있고 시크릿 키가 설정되어 있는지( :point_up: ) 확인하세요

사용자가 WordPress 계정 정보로 Discourse에 로그인할 수 있도록 하려면 WP Discourse를 DiscourseConnect 제공자로 설정해야 합니다. WP Discourse 설정에서 DiscourseConnect Provider 탭으로 이동하여 Enable DiscourseConnect Provider 체크박스를 선택하고 설정을 저장하세요.

다음으로, Discourse 사이트 설정으로 이동하여 검색창에 "discourse connect"를 입력하여 모든 Discourse DiscourseConnect 설정을 확인하세요. 먼저, discourse connect url을 WordPress의 URL로 설정하세요. 마지막 단계는 enable discourse connect를 선택하는 것입니다. 이 옵션을 선택하면 사용자가 WordPress를 통해서만 Discourse에 로그인할 수 있으므로, 준비가 완료되었는지 확인하세요.

Discourse에서 discourse connect를 활성화한 후, 올바르게 설정되었는지 확인하려면 브라우저의 시크릿 모드 창을 여세요. 일반적인(비시크릿) 브라우저 창에는 관리자 계정으로 로그인된 상태를 유지하세요(문제가 발생하여 설정을 되돌려야 할 경우를 대비하여). 시크릿 모드 창에서는 Discourse의 ‘Sign Up’ 버튼이 더 이상 표시되지 않는 것을 확인할 수 있습니다. ‘Log In’ 버튼을 클릭하세요. WordPress 로그인 화면이 표시되어야 합니다. WordPress 자격 증명을 입력하여 로그인하세요. 그러면 Discourse로 리다이렉트되어 로그인된 상태가 됩니다.

문제가 발생하거나 뭔가 잘못되었다고 느껴지면, 일반적인 브라우저 창으로 돌아가 enable discourse connect를 비활성화하여 사용자가 정상적으로 Discourse에 로그인할 수 있도록 하세요. 만약 일반적인 브라우저 창에서 관리자 계정으로 로그인되어 있지 않다면, 아래 문제 해결 섹션의 “Discourse 콘솔을 통해 DiscourseConnect 비활성화” 항목을 참고하여 Discourse에 대한 액세스를 다시 확보하세요.

이메일 인증

Discourse는 모든 사용자의 이메일 주소가 인증되어야 한다고 가정하지만, WordPress는 사용자에게 이메일 주소를 인증하도록 강제하지 않습니다. 기본 WordPress 설정에서는 등록 과정에서 사용자의 이메일 주소를 인증하는 것이 비교적 쉽지만, 프론트엔드 등록 양식을 생성하는 플러그인을 사용하는 사이트(예: WooCommerce로 추가할 수 있는 등록 양식)의 경우 WP Discourse 플러그인은 사용자의 이메일을 인증할 수 없습니다.

사용자의 이메일이 WordPress에서 인증되지 않은 경우, WordPress 사용자가 포럼에 로그인하기 전에 Discourse에서 발송하는 이메일 인증 알림에 응답해야 합니다. 이 플러그인에는 이 동작을 오버라이드할 수 있는 몇 가지 필터가 있습니다. 자세한 내용은 여기부터 시작하는 코드를 확인하세요.

require_activation 플래그 제거

WordPress가 이메일 주소를 인증하는 것이 확실하다면, Discourse가 이를 수행할 필요가 없도록 알릴 수 있습니다. require_activation 플래그를 완전히 제거하려면 WordPress(예: 테마의 functions.php 파일)에 다음과 같은 코드를 추가하세요:

// 'my_prefix'를 사이트 접두사로 대체하세요.

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification' );
function my_prefix_discourse_email_verification( $require_activation ) {
    return false;
}

특정 사용자의 require_activation 플래그를 제거하려면 다음과 같은 코드를 사용하세요:

// 'my_prefix'를 사이트 접두사로 대체하세요.

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification', 10, 2 );
function my_prefix_discourse_email_verification( $require_activation, $user_id ) {
    $user = get_userdata( $user_id );
    if ( /* $user에 대해 테스트되는 특정 조건 */ ) {

        return true;
    }

    return false;
}

Userdata Webhook

이 Webhook은 역사적인 이유로 존재합니다 - Discourse 이름 필드를 자동으로 채우는 것은 이제 Create or Sync Discourse Users on Login DiscourseConnect 제공자 옵션을 사용하여 달성할 수 있습니다.

Update Userdata Webhook(“Webhooks” 설정 패널에 위치)은 WordPress가 Discourse의 DiscourseConnect 제공자인 경우 사용할 수 있습니다. 이 Webhook은 WordPress에서 사용자의 Discourse 이름 필드를 자동으로 채웁니다.

DiscourseConnect 로그인 링크 생성

DiscourseConnect 제공자 옵션이 활성화되어 있다면, 다음과 같은 구조의 링크를 생성하여 WordPress 사이트에 DiscourseConnect 로그인 링크를 추가할 수 있습니다:

<a href="https://discourse.example.com/session/sso?return_path=/">Community</a>

return_path의 값을 사용자가 최종적으로 도달하길 원하는 포럼의 페이지로 설정하세요. WordPress 대시보드의 메뉴 섹션에서 이 구조의 URL을 커스텀 링크로 추가하여 WordPress 메뉴에 SSO 로그인 링크를 추가할 수 있습니다.

Discourse로 WordPress 로그인 (DiscourseConnect Client)

사이트가 Discourse의 DiscourseConnect 클라이언트로 작동하도록 하려면 DiscourseConnect Client 탭을 클릭하세요. 해당 페이지에서 Enable DiscourseConnect Client 및 Add Login Link 옵션을 선택하세요.

이제 Discourse 관리자/설정 페이지로 이동하여 'discourse connect’를 검색하여 모든 DiscourseConnect 옵션을 확인하세요.

  • ‘enable discourse connect provider’ 설정을 선택하세요
  • WordPress의 DiscourseConnect Secret Key를 Discourse의 ‘discourse connect provider secrets’ 설정의 ‘secret’ 필드로 복사하세요. 해당 설정의 ‘domain’ 필드에는 WordPress 사이트의 도메인을 입력하세요. 그런 다음 설정을 저장하기 위해 녹색 체크 표시를 클릭하세요.

완료되면, Discourse의 ‘discourse connect provider secrets’ 설정은 다음과 같이 보일 것입니다(도메인은 WordPress 도메인으로 설정됨):

이제 Discourse가 WordPress 사이트의 DiscourseConnect 제공자로 작동하고 있습니다.

브라우저의 시크릿 모드 창에서 WordPress 사이트를 엽니다. 이제 로그인 페이지로 이동하면 로그인 양식 아래에 ‘Log in with Discourse’ 링크가 보일 것입니다. 클릭하면 Discourse 로그인 양식으로 이동합니다.在那里 로그인하면 WordPress 로그인 페이지로 리다이렉트되며, Discourse와 계정을 동기화해야 한다는 알림이 표시됩니다. 알림의 지침을 따라 계정을 연결하면 이제 Discourse를 통해 WordPress 사이트에 로그인할 수 있습니다.

참고: 이 동작은 WordPress와 Discourse 모두에 기존 계정이 있는 사용자만 영향을 미칩니다. Discourse DiscourseConnect를 통해 생성된 새 WordPress 계정은 ‘Log in with Discourse’ 링크를 처음 클릭할 때 WordPress에 자유롭게 로그인할 수 있습니다. WordPress 사이트와 Discourse 포럼 모두에 기존 계정이 있는 사용자가 Discourse를 통해 로그인하기 쉽게 하려면, DiscourseConnect Client 옵션 탭에서 Sync Existing Users by Email 체크박스를 선택하세요.

Discourse 로그아웃 동기화

DiscourseConnect가 활성화되면, Discourse 사이트 설정 logout redirect에 사이트의 home_url과 쿼리 파라미터 request=logout를 추가하여 Discourse 로그아웃을 WordPress 사이트와 동기화할 수 있습니다. 이 설정은 /admin/site_settings/category/users의 Discourse 설정 섹션에 있습니다. ‘logout redirect’ URL의 예시는 다음과 같습니다:

http://example.com/?request=logout

문제 해결

포럼의 DiscourseConnect 제공자로 WordPress를 사용하는 데 문제가 있는 경우, 먼저 확인해야 할 사항은 다음과 같습니다:

  • WordPress와 Discourse에 설정된 DiscourseConnect 시크릿 키가 동일한지 확인하세요
  • WordPress 사이트에서 Enable DiscourseConnect Provider가 선택되었는지 확인하세요
  • Discourse에서 올바른 discourse connect url이 입력되었는지 확인하세요.

DiscourseConnect 사용 시 “Login Error”

사용자가 Discourse에 로그인하려고 할 때 “Login Error” 메시지를 받는 경우, 다음 링크를 참고하세요.

Debug and fixing common DiscourseConnect issues.

DiscourseConnect 비활성화

DiscourseConnect가 작동하지 않는 경우, enable discourse connect 사이트 설정을 비활성화하여 끌 수 있습니다. 어딘가에 관리자 계정으로 로그인되어 있지 않아 이를 끄지 못하는 경우에도 걱정하지 마세요, 다시 액세스하여 끄는 몇 가지 방법이 있습니다.

/users/admin-login을 통한 로그인

새 브라우저 창을 열고 URL 바에 포럼 URL 뒤에 /users/admin-login을 입력하세요. 예:

https://community.mysite.com/users/admin-login

관리자 이메일을 입력하도록 요청하는 입력 필드가 표시되어야 합니다. 이메일을 제출하면 관리자 계정에 직접 로그인할 수 있는 링크가 포함된 이메일을 받게 됩니다. 그런 다음 사이트 설정으로 이동하여 enable discourse connect를 비활성화하여 DiscourseConnect를 끌 수 있습니다.

만약 어떤 이유로든 이것이 작동하지 않는 경우에도 걱정하지 마세요, 서버 콘솔을 통해 DiscourseConnect를 끌 수 있습니다 (:point_down:)

서버 콘솔을 통해 DiscourseConnect 끄기

서버 콘솔이 무엇인지 모르거나 액세스 권한이 없는 경우, 호스팅 제공업체에 도움을 요청하세요. 서버에 SSH로 연결한 후, 실행해야 하는 명령어는 다음과 같습니다:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.enable_discourse_connect=false
exit
exit
11개의 좋아요

내 Discourse에 해당 옵션이 없다면 어떻게 하나요? :confused:

안녕하세요 @LosHunterros, Meta에 오신 것을 환영합니다!

기본 호스팅 플랜에는 Discourse Connect가 포함되어 있지 않습니다.
Screenshot_20240507_204846_Chrome

4개의 좋아요

답장 주셔서 감사합니다

1개의 좋아요

이제 정말 초보자 수준으로 설명해 주세요. 아니면 간단한 네 또는 아니오로만 답변해 주세요.

고객들이 WordPress에 계정을 만들었으니, 이를 제공자(Provider)로 사용하여 포럼에 쉽게 접근할 수 있도록 하고 싶습니다.

하지만 현재 Discourse의 AI와 문제가 있습니다. DiscourseConnect가 Google, Microsoft, 로컬 로그인 등 다른 모든 로그인 방식을 가로채는 것으로 이해하고 있습니다. 그런데 AI는 discourse connect allowed redirect domains를 설정하면 그렇지 않다고 확신하고 있습니다.

그렇게 설정해 봤습니다. 그런데도 여전히 다른 로그인 옵션 없이 WordPress로 리다이렉트됩니다.

그래서, AI의 환각(hallucination) 때문에 제 인생의 2시간을 낭비한 걸까요, 아니면 제가 뭔가 잘못한 걸까요? 처음부터 제 말이 맞아서 DiscourseConnect가 다른 로그인을 허용하지 않는다면, 당장 이걸 제거할 것입니다. 유럽의 이 지역에서는 Google 로그인 없이 지내는 것은 선택지가 아니기 때문입니다.

당신의 첫 직관이 맞았습니다. AI가 틀렸습니다: 자세히 보기.

불행히도, 그렇습니다.

1개의 좋아요

설정 가이드를 따라 SSO가 작동해야 하는 단계까지 진행했습니다. 하지만 시크릿 창에서 Discourse 사이트를 방문하면 긴 쿼리 문자열이 포함된 URL로 WordPress 첫 페이지로 즉시 리디렉션되며, 로그인 옵션이 보이지 않습니다.

이 단계에서 이런 동작이 예상되는 것인가요?
이제 WordPress 쪽(로그인/가입 등)을 완성하기만 하면 되는 건가요, 아니면 무언가를 잘못 설정한 건가요?

마이크, 환영해. 표준 워드프레스 로그인 페이지로 리다이렉트되어야 해. 바로 떠오르는 건 네 테마(또는 플러그인)가 사용자 정의 로그인 페이지를 제공하고 있다는 거야. 평소 로그인 페이지는 어떤 모습이었어?

안녕하세요, Angus님! 감사합니다. :slight_smile:

WordPress와 Discourse 모두 새로 설치했으며, Twenty Twenty-Five 테마가 활성화되어 있습니다. 영상 안내에 따라 단계별로 진행했지만, 인코그니토 창에서 Discourse에 접속하면 WordPress 사이트로 리다이렉트되어 로그인 화면이 아닌 테마의 홈 페이지에 도착합니다.

WordPress 사이트는 개발 환경에 있으므로 현재 디렉터리 프라이버시 설정이 적용되어 있습니다. 이것이 정상적인 로그인 페이지로의 리다이렉트에 영향을 주고 있을까요?

마이크, 지금 막 녹화한 영상 하나 보내줄게. 현재 코드로 정상적으로 설치된 모습을 보여주고 있어.

영상에서 보여준 내용과 내 설정을 비교해 봐. 똑같이 설정했는데도 여전히 작동하지 않는다고 확신한다면, 원인을 파악할 수 있도록 하나씩 점검해 나가자.

1개의 좋아요

안거스님,

영상을 올려주셔서 정말 감사합니다. 멋진 지원이었어요!

각 섹션의 스크린샷을 첨부했습니다(민감한 정보는 흐림 처리했습니다).

위 스크린샷에서는 실제로 선택이 되어 있지 않았습니다(아, 실수했어요). 하지만 시크릿 브라우저로 포럼에 접속하면 이제 자동으로 /wp-login.php 페이지로 리디렉션됩니다. 님이 보시는 것과 같은 포럼과 로그인 버튼이 표시되지 않아요.

이제 바로 wp-login 페이지로 이동하는 것은 크게 신경 쓰이지 않지만, 포럼에 직접 액세스할 수 있으면 항상 좋은 점이죠!

@angus 해결했어요… 처음에 “지금 뭐 하고 있는 거지?” 하고 헤매던 중에 이걸로 커뮤니티를 잠가버렸네요;

image

스타트업 모드에서 귀찮은 짓을 해서 죄송합니다 :dashing_away: .

다시 한번 멋진 지원에 감사드립니다 - 또 찾아올 거예요.

2개의 좋아요

해결해서 다행이에요!

안녕하세요, Angus. 이 문제에 대해 도움을 주실 수 있을까요? 제가 작성한 주제에 아직까지 답변이 없습니다:

기본적으로 사용자를 익명 처리하면 SSO 플러그인이 해당 사용자에게 새 계정을 다시 생성합니다. 특정 사용자에게만 계정 생성을 방지하기 위해 개별적으로 사용자를 비활성화하는 방법이 있을까요? 그리고 누군가를 차단하거나 익명 처리할 때 자동으로 동기화될 수도 있을까요?

사용자를 익명화한 다음 이메일 주소를 SSO 이메일로 설정하는 방법도 있습니다. 아니면 WordPress에서 해당 사용자를 차단하는 방법(이것이 진정한 해결책인 것 같습니다. WordPress는 사용자를 거부해야 합니다)도 있습니다.

WordPress에서 사용자가 SSO를 통해 로그인하는 것을 어떻게 차단할 수 있을까요? 그게 해결책이라고 생각합니다.

그건 워드프레스 관련 질문이에요. :wink:

인터넷을 찾아봤는데, 역할을 "이 사이트에서 역할 없음"으로 변경할 수 있는 것 같아요.

아, 내 의도를 좀 더 명확히 설명하자면, 사용자는 웹사이트를 계속 사용할 수 있도록 하되 포럼 계정을 생성하지 못하게 하고 싶습니다.

우리 포럼은 웹사이트와 분리되어 있어서, 커뮤니티에서 문제를 일으켜 제명된 사람들도 SaaS 도구인 웹사이트는 계속 사용할 수 있도록 해야 합니다.

그럼 discourse에서 그들을 정지해야 할 것 같습니다. 그들의 콘텐츠를 익명화해야 한다면, 그렇게 한 후 정지된 계정을 생성해야 합니다.

안녕하세요, @Shauny. 원래 지원 게시글에 답변을 남겼습니다:

1개의 좋아요