WordPress SSOプロバイダーで空白ページが表示される

Discourse の SSO プロバイダーとして WordPress をプラグイン経由で使ってみようとしています。フォーラムサイトでのログインをクリックすると、SSO URL パラメータが追加された状態で自分のウェブサイトにリダイレクトされますが、サイト/ページが空白で表示されてしまいます。このプラグインは、その URL パラメータを読み取って何らかのアクションを起こすものですが、それが失敗しているのでしょうか?特定のパスにリダイレクトする必要があるのでしょうか?期待される動作がわからないため、トラブルシューティングの方法もわかりません。サーバーのエラーログにはエラーが表示されていません。

あなたのサイトはデフォルトの WordPress ログインページ /login.php を使用していますか?使用していない場合は、「ログインページへのパス」オプション(WP Discourse SSO プロバイダータブにあります)にパスを追加する必要があります。

あなたのサイトに WooCommerce がインストールされていますか?

デフォルトは使用されていませんが、フィールドで指定しました。それでもうまくいかず、空白のページが表示されるだけです。

そして、いいえ、WooCommerce は使用していません。

私の理解が間違っているか、追加の変更が必要なのかもしれません。テスト中に、すでに Web サイトにログインしている場合は期待通り動作することがわかりました。しかし、私が期待していたのは、まだログインしていない場合にログインプロセスが開始されることでしたが、それは起こっていないようです。それに基づいて、いくつかのフォローアップ質問があります。

  1. Discourse からのログインリダイレクトは、私のサイトの /?sso=abcd1235… へユーザーを誘導するべきですか、それともカスタムログインパスを含む /sign-in/?sso=abcd1235… へ誘導するべきですか?現在は / になっています。
  2. カスタムログインコードは、SSO URL パラメータを維持し、ログイン後に私のサイトへリダイレクトする際にそれらを含めて、SSO 接続を確立するという期待でよろしいでしょうか?

そして、Discourse のユーザー名に WordPress のユーザー名が使われていることに気づきました。私たちの場合、3 者認証プロバイダーに基づいてハッシュ値として生成されるユーザー名ではなく、WordPress のニックネームを使用する必要があります。そのため、行き止まりかもしれません。

はい。Discourse 上の「ログイン」ボタンをクリックすると、ユーザーは Discourse で設定された sso url にリダイレクトされます。これは通常、あなたのサイトのホーム URL に設定してください。

WordPress にまだログインしていない場合、SSO コードはユーザーをサイトのログイン URL にリダイレクトします。この URL のデフォルトは /wp-login.php です。「ログインページへのパス」オプションを設定することで上書き可能です。ログイン後、ユーザーは Discourse から送信されたクエリパラメータを保持したまま、サイトのホーム URL へ戻されます。

WordPress にまだログインしていない状態でこれが機能しない場合、あなたのサイトに設定されたログインリダイレクトが、WP Discourse SSO コードによって設定されたリダイレクトを上書きしている可能性があります。もう一つの可能性として、Discourse によって設定されたクエリパラメータが、あなたのサイトのログインコードによって削除されていることが考えられます。

wpdc_sso_params フィルターを使用して、プラグインによって設定されるユーザー名を上書きできます。

add_filter( 'wpdc_sso_params', 'wpdc_custom_sso_params', 10, 2 );
function wpdc_custom_sso_params( $params, $user ) {
    $params['username'] = $user->user_nicename;

    return $params;
}

詳細については、wp-discourse/lib/sso-provider/discourse-sso.php at main · discourse/wp-discourse · GitHub をご覧ください。

プラグインのコードを見て、その部分を変更できることに気づきました。オーバーライドを使う方がはるかに良いアプローチですね、ありがとうございます!カスタムログインコードを確認して、どこでプロセスに干渉しているか確認します。とても役立ちました、改めてありがとうございます。