단일 WordPress에서 wp-discourse로 여러 Discourse 사이트 운영

클라이언트 중 한 명이 구독 관리와 wp-discourse로 연결된 포럼을 갖춘 WordPress 사이트를 운영 중입니다. 현재까지는 문제가 없습니다.

하지만 이제 그는 단일 WordPress 사이트로 인증되는 추가 Discourse 사이트를 여러 개 더 추가하기를 원합니다. 첫 번째 Discourse 사이트의 설정을 두 번째 사이트로 복사해 보았지만, WordPress가 첫 번째 Discourse 사이트로 리다이렉트되었습니다. 그래서 첫 번째 Discourse 사이트를 두 번째 사이트의 discourse_connect 서버로 설정하면 해결될지 생각했지만, 이것도 작동하지 않았습니다(이 경우에도 첫 번째 Discourse 사이트로 리다이렉트되고 두 번째 사이트에는 로그인되지 않음).

단일 WordPress 사이트가 여러 Discourse 사이트에 인증을 제공하는 방법이 있을까요?

두 개 이상의 플랫폼에서 단일 로그인(SSO)을 사용할 계획이라면, 가장 적절한 솔루션은 keycloak를 사용하는 것입니다.
이 방식은 단일 로그인 서버에 대한 고민을 덜 수 있고, 소셜 네트워크를 통한(그리고 그 외의) 더 간편한 로그인도 가능하게 해주기 때문에 좋습니다.
사용자 정보를 잃지 않고 사이트를 자유롭게 추가하거나 제거할 수 있습니다.

WP Discourse 플러그인은 이를 처리하도록 설정되어 있지 않지만, 가능할 것으로 보입니다.

Discourse의 discourse_connect_url 설정에 site URL 매개변수를 추가하는 것부터 시작해 보세요. WordPress에서는 site 매개변수를 사용하여 올바른 Discourse 사이트로 리디렉션되도록 설정해야 합니다:

아래 위치에서 발생하는 sync_sso 호출도 처리해야 할 가능성이 높습니다: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

이 부분은 확신은 없지만, WordPress가 매개변수를 제거하지 않도록 하기 위해 이 함수에서 허용되는 쿼리 변수에 site를 추가해야 할 수도 있습니다: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

이상적으로는 WordPress의 action과 filter 훅을 사용하여 위의 변경 사항을 수행할 수 있습니다. 이를 위해서는 코드에 훅을 추가해야 할 것으로 보입니다.

이 사양이 WordPress에서 여러 Discourse 사이트로 게시물을 게시하는 것을 포함하지 않는다고 가정합니다. 만약 그렇다면 필요한 변경 사항은 조금 더 복잡해질 것입니다.

다른 문제가 생각나면 알려드리겠습니다.

수정: WordPress에서 Discourse 사용자 ID가 어떻게 사용되는지, 여러 사이트 간에 충돌이 발생하지 않도록 고려해야 합니다. WordPress의 단일 사용자는 잠재적으로 여러 WordPress 사이트에서 계정을 가질 수 있습니다. 각 사이트마다 다른 Discourse 사용자 ID를 가질 것입니다.

수정: 제가 볼 수 있는 가장 큰 문제는 WordPress 사이트에서 “로그인 시 Discourse 사용자 생성 또는 동기화” 설정이 활성화되어 있는 경우입니다. 이는 Discourse의 sync_sso 경로에 API 호출을 수행합니다. 어느 Discourse 사이트에서 사용자를 동기화하거나 생성해야 하는지 아는 방법이 필요합니다. 또한 각 사이트마다 Discourse API 키가 필요합니다. 이는 가능해 보이지만 일부 복잡성을 추가할 것입니다.

어떤 정도로는 가능해 보이네요. 네, 그는 게시글 작성에는 관심이 없고, 인증과, 아마도 WooCommerce나 비슷한 곳에서 그룹을 푸시하는 것만 신경 쓰는 것 같습니다.

WordPress 사이트에서 구매가 발생했을 때 해당 Discourse 사이트에서 사용자의 그룹 멤버십을 조정하는 것을 의미하는 것으로 보입니다. 이는 가능해 보이지만, sync_sso 루트로 API 요청을 보내는 것이 가장 적합할 것입니다. WP Discourse 플러그인에는 이를 위한 함수가 있지만, 플러그인의 옵션 페이지에 설정된 Discourse URL과 API 키를 사용합니다: https://github.com/discourse/wp-discourse/blob/main/lib/utilities.php#L278-L326. 플러그인이 이러한 매개변수에 필터 후크를 추가하여 조건부로 설정할 수 있도록 하는 것이 좋을 것입니다.

저희도 비슷한 설정을 검토하고 있어서, 솔루션에 관심이 있습니다.

개발팀에서 뛰고 싶냐고 물었을 때, 그가 답을 하지 않은 것 같아요. (다른 일로 바빠서 그런 것 같습니다.)

예산이 있다면 도움이 될 수 있을 것 같아요.

아직 탐색 단계라 특별히 예산이 정해져 있지는 않습니다. 하지만 개발 지원을 해드릴 수 있고, 소액의 자금도 제공할 수 있습니다. 만약 클라이언트도 함께 비용을 부담해 주신다면, 자금을 모아 함께 진행할 수 있을 것입니다.