Discourse에서 WordPress(및 WooCommerce)로 인증된 계정을 SSO로 인식하도록 설정

How to turn off Discourse email verification?에서 이어서 진행 중인 토론입니다:

Discourse가 인증된 계정을 인식하지 못하고 있습니다. 현재 사이트 설정에 대한 맥락은 다음과 같습니다:

WP를 SSO 제공자로 사용하여 WP Discourse 플러그인을 사용하고 있습니다.

현재 SSO 설정 <img>

현재 새로운 사용자 등록을 관리하기 위해 WooCommerce(WC)를 사용하고 있으며, 해당 페이지는 https://pickleballist.com/my-account 입니다.

Booster for WC라는 플러그인을 사용 중이며, 이 플러그인은 WC에 추가 기능을 제공하여 사용자가 계정에 액세스하기 전에 이메일 인증을 요구할 수 있게 합니다.

플러그인 옵션 <img>

수신된 인증 이메일 <img>

사용자가 계정 활성화 이메일의 링크를 클릭하면 WordPress의 /my-account/ 페이지로 이동합니다. 인증 링크를 클릭하지 않고 등록 자격 증명 로그인 시도를 하면, 먼저 계정을 인증해야 한다는 메시지와 함께 "인증 이메일 재전송"을 클릭할 수 있는 링크가 표시됩니다.

관리자 콘솔의 “Users” 페이지를 방문하면 어떤 계정이 인증되었는지, 어떤 계정이 인증되지 않았는지를 쉽게 확인할 수 있습니다.

인증 상태가 표시된 사용자 계정 <img>

불행히도, 사용자가 이메일을 인증한 후 https://forums.pickleballist.com의 포럼을 방문하면 자동으로 로그인되지 않습니다. :disappointed_face: 가장 문제는, 포럼에서 “로그인” 버튼을 클릭하면 이메일을 확인하고 Discourse의 “새 계정 확인” 이메일 링크를 클릭해야 한다는 점입니다.

WooCommerce에서 수신되는 메타데이터를 기반으로 실제로 누가 인증되었는지 확인하도록 Discourse를 설정할 수 있는 방법이 있을까요?

이 "이메일 인증 모듈"이 wp_new_user_notification에 영향을 주지 않는다고 추측하는데, 그렇다면 Discourse가 이를 볼 수 없겠죠? 다른 훅(hook)을 Discourse가 찾도록 할 수 있을까요?

도움말을 기다리고 있습니다!

@simon 여기서 남기신 코멘트를 방금 확인했습니다:

위 :up_arrow:︎ 코드 스니펫을 사용하는 것이 제가 하려는 일을 해결하는 방법일까요?

Booster for WC 플러그인이 이메일 주소를 인증하기 전에 사용자가 WordPress에 로그인하는 것을 방지하는 한, 해당 코드를 안전하게 사용할 수 있습니다. 테마나 플러그인에 추가하면 사용자가 이메일 주소를 다시 인증하지 않고도 Discourse 사이트에 로그인할 수 있게 됩니다.

이것도 가능합니다. WooCommerce에서 설정하는 메타데이터 키의 이름과 인증된 이메일 주소를 가진 사용기에 대한 예상 반환 값을 알고 있다면, 해당 함수에 이에 대한 확인 로직을 추가할 수 있습니다. 다음과 같은 방식으로요:

add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
    if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
        $require_activation = false;
    }

    return $require_activation;
}

WooCommerce에서 SSO 로그인 리디렉션 관련 문제를 겪고 있다면, 사이트에 이 플러그인을 설치해야 할 수 있습니다: GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub. 이 플러그인이 수행하는 작업에 대한 자세한 내용은 플러그인의 readme 파일을 참고하세요.

그 코드가 문제를 해결했습니다! 이제 사용자는 WP에서 생성된 인증 링크만 클릭하면 됩니다. :folded_hands: 감사합니다!

방금 이 플러그인을 추가했는데, 사용자가 WP에서 생성된 인증 링크를 클릭하면 인증 후에도 WP의 /my-account 페이지로만 이동합니다. Discourse 포럼으로 다시 돌아가지 않습니다. 여기서는 어떤 동작이 기대되는 것인가요?

확인 링크는 Booster for WC 플러그인에 의해 생성되는 것 같습니다. 만약 그렇다면, 제가 테스트해본 사항이 아닙니다. wp-discourse-woocommerce-support 플러그인이 해결하려는 문제는 WooCommerce가 모든 로그인 시도 시 설정하는 로그인 리디렉트를 오버라이드하는 것입니다. 최근에는 WooCommerce와 함께 테스트하지 않았지만, 과거에 사이트에서 WooCommerce가 설치되어 있으면 WordPress를 통해 로그인하려고 할 때 로그인되지 않은 사용자가 Discourse로 리디렉트되지 않는 문제를 방지했습니다.

기대되는 동작은 다음과 같습니다. WordPress에 로그인하지 않은 사용자가 Discourse의 로그인 버튼이나 Discourse에 게시된 게시물 아래에 생성된 SSO 로그인 링크를 클릭하면, 사용자는 WordPress 로그인 과정을 거친 후 올바른 Discourse URL로 리디렉트됩니다. 이메일 주소를 확인한 사용자에게 이 기능이 올바르게 작동하지 않는다면 알려주세요.

사용자가 클릭하는 확인 링크와 함께 이 기능을 작동하도록 만드는 것이 가능할 수 있지만, 저는 이것이 별개의 문제라고 생각합니다.