무언가가 올바르게 설정되어 있지 않은 것 같습니다. 한 발 물러서서 전체 구조를 다시 살펴보는 것이 좋을 수도 있습니다. 현재 제 로컬 환경에는 SSO 제공자 사이트가 설정되어 있지 않지만, 이 정보가 도움이 될 수 있습니다.
Discourse에서 다음 설정들이 구성되었는지 확인하세요:
discourse connect url 설정은 게시하신 코드를 처리하는 URL로 설정되어야 합니다.
discourse connect secret 설정은 최소 10자 이상의 문자열로 설정하세요. 게시하신 코드에 keyhere라는 7자 문자열이 하드코딩되어 있는 것을 확인했습니다. 코드를 실행할 때 이 값을 변경하고 있다고 가정합니다. Discourse에 입력한 값과 동일한 값으로 설정하세요.
이제 Discourse 사이트에서 로그아웃하세요. 브라우저의 웹 인스펙터(개발자 도구)를 열고 네트워크 탭으로 이동합니다. Discourse의 “로그인” 버튼을 클릭합니다. 아래 스크린샷의 첫 두 요청과 유사한 요청을 확인해야 합니다:
첫 번째 요청은 http://forum.example.com/session/sso?return_path=%2F로 전송됩니다.
다음 요청은 https://example.com/?sso=<sso_payload_sent_from_discourse>&sig=<sso_signature>로 전송되어야 합니다.
example.com과 forum.example.com은 실제로 사용 중인 도메인으로 설정되어야 합니다.
모든 설정이 올바르게 이루어졌다면, sso와 sig 매개변수의 값이 여기서 설정한 변수에 할당되기를 기대합니다:
$sso = $_GET['sso'];
$sig = $_GET['sig'];
나였다면 나머지 코드를 주석 처리하고, 페이로드를 수신하여 변수에 할당할 수 있는지 확인하는 것부터 시작했을 것입니다.
DiscourseConnect가 활성화된 상태에서는 /u/admin-login 경로로 이동하여 Discourse 사이트에 다시 로그인할 수 있습니다. Discourse 사이트의 Rails 콘솔에 액세스 권한이 있다면, Rails 콘솔에서 DiscourseConnect를 비활성화하여 다시 로그인할 수도 있습니다:
SiteSetting.enable_discourse_connect = false
게시하신 코드 하단에 더 많은 오류가 있을 가능성이 있습니다. 예를 들어, 예상되는 sig를 생성하기 전에 sso 매개변수의 값에 urldecode를 호출해야 한다고 _생각_합니다. WP Discourse 플러그인이 이를 어떻게 처리하는지 확인해 보세요:
위 함수의 $payload는 다음 위치에서 정리(sanitized)된 후의 sso 쿼리 매개변수 값입니다: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub.

