WordPress 가입 시 Discourse 사용자를 자동으로 생성

제 사이트는 DiscourseConnect Provider를 사용하며, WordPress가 Discourse 로그인 관리를 담당합니다.

WordPress에서 사용자가 가입할 때, 해당 사용자를 위한 Discourse 계정이 즉시 생성되고 Discourse 활성화 이메일이 전송되기를 원합니다. 하지만 그런 일이 일어나지 않는 것 같습니다.

WordPress 설정에서 “사용자 데이터 동기화(Sync user data)” 옵션을 활성화해 두었습니다.

설명의 내용을 보면, 사용자가 WordPress에 로그인할 때 Discourse 사용자를 생성한다고 되어 있습니다. 하지만 실제로는 그런 일이 일어나지 않습니다. 사용자가 Discourse 사이트를 방문할 때까지 Discourse 사용자는 생성되지 않습니다.

제 통합 설정이 제대로 작동하지 않는 건가요? 아니면 이 설명을 오해하고 있는 건가요?

감사합니다!

안녕하세요 @37Rb, 현재 상황은 다음과 같습니다.

동영상을 보신 후 추가로 궁금한 점이 있으시면 알려주세요.

이제 이해했습니다. 사용자가 WordPress에 "로그인"할 때 새로운 Discourse 사용자가 생성되는 것이었네요. WordPress에서 "회원가입"할 때 새 사용자가 생성되는 것은 아닙니다. 저희 사용자는 직접 가입할 수 있으며, 가입 즉시 로그인된 상태로 간주됩니다. 즉, 가입 시점에는 로그인되어 있지만 Discourse 사용자는 아직 없는 상태입니다.

사용자가 WP에서 로그아웃했다가 다시 WP에 로그인하면 그때 Discourse 사용자가 생성됩니다. 방금 확인해 보았습니다.

저희는 WooCommerce 사이트이므로, 로그인하지 않은 상태로 구매를 하면 자동으로 가입 처리가 되기 때문에 WordPress에서 이메일 인증을 요구하지 않습니다. 가입 후 Discourse에 처음 방문할 때 Discourse에서 주소 확인 이메일을 받게 됩니다.

문제가 발생하는 사용자는 다음 두 가지 조건을 모두 충족하는 사람들입니다:

  • WP에서 가입했지만 로그아웃 후 다시 로그인하지 않는 경우
  • Discourse(이커머스 사이트의 지원 사이트)를 방문하지 않는 경우

Wordpress/WooCommerce는 자체 가입을 로그인으로 처리합니다 - 가입 직후 로그인된 상태로 간주됩니다. 로그아웃 후 다시 로그인할 때만이 아니라, 사용자가 자체 가입할 때 Discourse 사용자를 생성하도록 할 수 있는 방법이 있을까요?

라이언, 로그인 후 사용자가 생성되는 것이 플러그인의 동작이라는 점에 동의합니다. 구체적으로, 플러그인은 wp_login 훅을 사용하고 있습니다. 워드프레스에는 user_register 훅도 있지만, 플러그인이 이 훅을 사용하지 않는 이유는 워드프레스 데이터베이스에 레코드가 삽입된 직후, 사용자의 상세 정보(특히 이메일)가 검증되었는지 여부와 관계없이 즉시 실행되기 때문입니다.

조금 장난스럽게 말하자면, 만약 그렇다면 왜 WooCommerce가 wp_login 훅을 트리거하지 않는지 궁금합니다 :slight_smile: 하지만 더 유용한 답변을 드리자면, 그것이 실제로 그렇게 작동한다면 WooCommerce가 등록과 로그인 직후 모두 실행하는 다른 훅이나 필터가 있을 가능성이 큽니다.

아직 플러그인에 이 기능을 포함하지 않은 이유는, 라이언님의 사례에서 보실 수 있듯이 워드프레스에서 사용자가 생성/등록/로그인되는 방법이 매우 다양하기 때문입니다.

하지만 라이언님의 특정 사례가 작동하도록 해보겠습니다. 먼저, 등록/자동 로그인이 발생한 직후 실행되는 훅을 찾아야 합니다. 정확히 어떻게 설정했는지, 즉 어떤 플로우를 사용하고 있는지 확인해 주실 수 있을까요? 가능한 한 구체적으로 알려주시면 좋으며, 예를 들어 사용하신 문서가 있다면 그것도 알려주세요.

WooCommerce가 혼란을 일으키는 원인이라고 의심합니다. 가입 후 자동으로 로그인되는 기능은 WordPress가 아니라 WooCommerce의 기능인 것으로 보입니다. 그리고 의도적으로 로그인 액션을 발생시키지 않습니다.

이 용도에 사용할 적절한 WooCommerce 훅을 찾아볼 수 있습니다. 올바른 WooCommerce 훅을 찾으면, Discourse 사용자를 생성하기 위해 호출할 수 있는 WP Discourse 함수나 발생시킬 수 있는 훅이 있나요?

네, 사용할 올바른 훅을 찾으면 다음과 같이 Discourse에서 사용자를 생성할 수 있습니다:

$user = get_user_by( 'id', $user_id );
$params = WPDiscourse\Utilities\Utilities::get_sso_params( $user );
WPDiscourse\Utilities\Utilities::sync_sso_record( $params, $wp_user_id )

이 컨텍스트에서 신규 사용자의 user_id를 가지고 있을 것으로 가정합니다.

woocommerce_created_customer 액션이 잘 작동하는 것 같습니다.

위 코드 외에도 이메일 주소를 인증된 상태로 표시하는 데에도 유용합니다.

delete_user_meta( $user_id, 'discourse_email_not_verified' );

지금까지 잘 작동하고 있습니다. 도움 주셔서 감사합니다!!!