何かが正しく設定されていない可能性が高いです。一歩引いて考えてみてください。現在、ローカル環境でSSOプロバイダーサイトを設定していませんが、これで部分的に役立つかもしれません。
Discourseで、次の設定が構成されていることを確認してください。
discourse connect url 設定は、投稿したコードを処理しているURLに設定する必要があります。
discourse connect secret 設定は、10文字以上の文字列に設定してください。投稿したコードに7文字の文字列 keyhere がハードコードされていることに注意してください。コードを実行する際にその値を変更していると仮定します。Discourseに入力したものと同じ値に設定してください。
これでDiscourseサイトからログアウトしてください。ブラウザのWebインスペクターを開き、ネットワークタブに移動します。Discourseの「ログイン」ボタンをクリックします。以下のスクリーンショットの最初の2つのリクエストと同様のリクエストが表示されるはずです。
最初のリクエストは http://forum.example.com/session/sso?return_path=%2F になります。
次リクエストは https://example.com/?sso=<discourseから送信されたssoペイロード>&sig=<sso署名> になるはずです。
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
投稿したコードのさらに下の方にエラーがある可能性があります。例えば、期待される署名を生成する前に、sso パラメータの値に対して urldecode を呼び出す必要があると思います。WP Discourseプラグインがどのように処理しているか確認してください。
上記の関数における$payloadは、単にssoクエリパラメータの値であり、ここでサニタイズされた後です: wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub

