WP DiscourseとDiscourseConnectでシングルサインオン(SSO)を設定する

WP Discourse プラグインを使用すると、WordPress で DiscourseConnect を設定でき、ユーザーは WordPress アカウントで Discourse にログインしたり、Discourse アカウントで WordPress にログインしたりできます。DiscourseConnect を設定する前に、まず WordPress に WP Discourse プラグインをインストールし、Discourse と接続する必要があります。準備が整ったら、この短いビデオをご覧ください。または、以下の手順に従ってください。

次のステップ

DiscourseConnect の設定が完了したら、以下のトピックもご覧ください。


手順

秘密鍵の設定

WP DiscourseDiscourseConnect プロバイダーとして設定する場合でも、クライアントとして設定する場合でも、秘密鍵を設定する必要があります。「DiscourseConnect Secret Key」タブに移動し、10 文字以上の文字列(数字、文字、記号すべて使用可能)を入力してください。この鍵の作成には、強力なパスワードを作成するのと同じルールを使用してください。設定完了後は必ず保存してください。

次に、Discourse サイトの設定(管理パネル内)を開き、「discourse connect」を検索します。上部付近の設定の一つに「discourse connect secret」という項目があります。WP Discourse で設定した秘密鍵をここに貼り付け、緑色のチェックマークをクリックしてください。

WordPress で Discourse にログインする(DiscourseConnect プロバイダー)

これらの手順を実行する前に、WP Discourse が Discourse と接続されており、秘密鍵が設定されていることを確認してください(:point_up:

ユーザーが WordPress アカウント情報を使って Discourse にログインできるようにするには、WP DiscourseDiscourseConnect プロバイダーとして設定する必要があります。WP Discourse 設定の「DiscourseConnect Provider」タブに移動し、「Enable DiscourseConnect Provider」チェックボックスを選択して設定を保存してください。

次に、Discourse サイトの設定に移動し、検索ボックスに「discourse connect」と入力して、すべての DiscourseConnect 設定を表示します。まず、「discourse connect url」を WordPress の URL に設定します。最後のステップは、「enable discourse connect」を選択することです。このオプションを選択すると、ユーザーは WordPress を通じてのみ Discourse にログインできるようになるため、準備が整うまで選択しないでください。

Discourse で discourse connect を有効にした後、設定が正しく行われたか確認するために、ブラウザでシークレットウィンドウを開いてください。通常の(シークレットではない)ブラウザウィンドウでは、何か問題が発生して設定を元に戻す必要がある場合に備えて、管理者アカウントでログインしたままにしておきます。シークレットウィンドウでは、Discourse の「サインアップ」ボタンが表示されなくなることに気づくはずです。「ログイン」ボタンをクリックしてください。WordPress のログイン画面が表示されるはずです。WordPress の認証情報を入力してログインすると、Discourse にリダイレクトされ、ログイン状態になります。

何か問題が発生した場合、または何かおかしいことに気づいた場合は、通常のブラウザウィンドウに戻り、「enable discourse connect」を無効にして、ユーザーが通常通り Discourse にログインできるようにしてください。何らかの理由で通常のブラウザウィンドウで管理者アカウントにログインしていない場合は、以下のトラブルシューティングセクションにある「Discourse コンソールを介して DiscourseConnect を無効にする」を参照して、Discourse へのアクセス権を取り戻してください。

メール検証

Discourse はすべてのユーザーのメールアドレスの検証を求めていますが、WordPress はユーザーにメールアドレスの検証を強制しません。デフォルトの WordPress 設定では、登録プロセス中にユーザーのメールアドレスを検証するのは比較的簡単ですが、フロントエンドの登録フォームを作成するプラグイン(例えば、WooCommerce で追加できる登録フォームなど)を使用している場合、WP Discourse プラグインはユーザーのメールアドレスを検証できません。

WordPress でユーザーのメールアドレスが検証されていない場合、WordPress ユーザーがフォーラムにログインするには、Discourse から送信されるメール検証通知に応答する必要があります。この動作をオーバーライドするために使用できるフィルタがいくつかプラグインに含まれています。詳細については、こちら からコードをご覧ください。

require_activation フラグの削除

WordPress がメールアドレスを認証していることが確実な場合、Discourse に対してその必要がないことを伝えることができます。require_activation フラグを完全に削除するには、WordPress(例:テーマの functions.php ファイル内)に以下のようなコードを追加してください。

// 'my_prefix' をサイトのプレフィックスに置き換えてください。

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification' );
function my_prefix_discourse_email_verification( $require_activation ) {
    return false;
}

特定のユーザーに対して require_activation フラグを削除するには、以下のようなコードを使用してください。

// 'my_prefix' をサイトのプレフィックスに置き換えてください。

add_filter( 'discourse_email_verification', 'my_prefix_discourse_email_verification', 10, 2 );
function my_prefix_discourse_email_verification( $require_activation, $user_id ) {
    $user = get_userdata( $user_id );
    if ( /* $user に対してテストするいくつかの条件 */ ) {

        return true;
    }

    return false;
}

ユーザーデータ Webhook

この Webhook は歴史的な理由で存在しています。Discourse 名フィールドを自動的に埋めることは、DiscourseConnect プロバイダーオプションの「ログイン時に Discourse ユーザーを作成または同期」を使用することで現在可能です。

「Update Userdata」Webhook(「Webhooks」設定パネル内)は、WordPress が Discourse の DiscourseConnect プロバイダーとして機能している場合に使用できます。この Webhook は、WordPress 上でユーザーの Discourse 名フィールドを自動的に埋めます。

DiscourseConnect ログインリンクの作成

DiscourseConnect プロバイダーオプションが有効になっている場合、以下の構造を持つリンクを作成することで、WordPress サイトに DiscourseConnect ログインリンクを追加できます。

<a href="https://discourse.example.com/session/sso?return_path=/">コミュニティ</a>

return_path の値を、ユーザーが最終的に到達してほしいフォーラムのページに設定してください。この構造の URL を WordPress ダッシュボードの「メニュー」セクションの「カスタムリンク」として追加することで、WordPress メニューに SSO ログインリンクを追加できます。

Discourse で WordPress にログインする(DiscourseConnect クライアント)

サイトを Discourse の DiscourseConnect クライアントとして機能させるには、「DiscourseConnect Client」タブをクリックしてください。そのページで、「Enable DiscourseConnect Client」と「Add Login Link」オプションを選択します。

次に、Discourse の管理/設定ページに移動し、「discourse connect」を検索して、すべての DiscourseConnect オプションを表示します。

  • 「enable discourse connect provider」設定を選択
  • WordPress から「DiscourseConnect Secret Key」をコピーし、Discourse の「discourse connect provider secrets」設定の「secret」フィールドに貼り付けます。その設定の「domain」フィールドには、WordPress サイトのドメインを入力してください。その後、緑色のチェックマークをクリックして設定を保存します。

完了すると、Discourse の「discourse connect provider secrets」設定は以下のようになります(ドメインが WordPress のドメインに設定されている場合):

これで、Discourse が WordPress サイトの DiscourseConnect プロバイダーとして機能するようになります。

ブラウザでシークレットウィンドウを開き、WordPress サイトを開いてください。ログインページに移動すると、ログインフォームの下に「Discourse でログイン」というリンクが表示されます。それをクリックすると、Discourse のログインフォームに移動します。そこでログインすると、WordPress のログインページに戻され、アカウントを Discourse と同期する必要があるという通知が表示されます。通知内の指示に従ってアカウントをリンクすると、Discourse を通じて WordPress サイトにログインできるようになります。

:この動作は、WordPress と Discourse の両方に既存のアカウントを持つユーザーにのみ影響します。Discourse DiscourseConnect を通じて作成された新しい WordPress アカウントは、「Discourse でログイン」リンクを初めてクリックした際に自由に WordPress にログインできます。WordPress サイトと Discourse フォーラムの両方に既存のアカウントを持つユーザーが Discourse を通じてログインしやすくするには、「DiscourseConnect Client」オプションタブで「Sync Existing Users by Email」チェックボックスを選択してください。

Discourse ログアウトの同期

DiscourseConnect が有効になっている場合、Discourse からのログアウトを WordPress サイトと同期するには、Discourse サイト設定の「logout redirect」に、クエリパラメータ request=logout を付加したサイトの home_url を追加します。この設定は、/admin/site_settings/category/users の Discourse 設定セクションにあります。以下は「logout redirect」URL の例です。

http://example.com/?request=logout

トラブルシューティング

WordPress をフォーラムの DiscourseConnect プロバイダーとして使用している際に問題が発生した場合は、最初に以下の点を確認してください。

  • WordPress と Discourse に設定された DiscourseConnect 秘密鍵が同じであること
  • WordPress サイトで「Enable DiscourseConnect Provider」が選択されていること
  • Discourse で正しい「discourse connect url」が入力されていること

DiscourseConnect を使用した際の「ログインエラー」

ユーザーが Discourse にログインしようとした際に「ログインエラー」メッセージが表示される場合は、以下をご覧ください。

Debug and fixing common DiscourseConnect issues.

DiscourseConnect の無効化

DiscourseConnect が正常に動作しない場合は、「enable discourse connect」サイト設定を無効化してオフにできます。どこかで管理者アカウントにまだログインしていない場合は、オフにする方法がいくつかありますのでご安心ください。

/users/admin-login 経由でのログイン

新しいブラウザウィンドウを開き、URL バーにフォーラムの URL の後に /users/admin-login を入力してください。例:

https://community.mysite.com/users/admin-login

管理者のメールアドレスを入力する入力欄が表示されます。メールアドレスを送信すると、管理者アカウントに直接ログインできるリンクが記載されたメールが届きます。その後、サイト設定に移動し、「enable discourse connect」を無効化して DiscourseConnect をオフにしてください。

何らかの理由でこれが機能しない場合でも、心配しないでください。サーバーのコンソール(:point_down:)を介して DiscourseConnect をオフにすることができます。

サーバーコンソールを介した DiscourseConnect のオフ

サーバーコンソールが何か分からない場合、またはアクセスできない場合は、ホスティングプロバイダーにサポートを依頼してください。サーバーに SSH で接続した後、実行する必要があるコマンドは以下の通りです。

cd /var/discourse
./launcher enter app
rails c
SiteSetting.enable_discourse_connect=false
exit
exit
「いいね!」 11

Discourseにこれらのオプションがありません。 :/\n

@LosHunterrosさん、Metaへようこそ!

Discourse Connectは、基本的なホスティングプランには含まれていません。
Screenshot_20240507_204846_Chrome

「いいね!」 4

ご返信ありがとうございます

「いいね!」 1

本当に101レベルが必要です。または簡単な「はい」か「いいえ」で。

これらの顧客のために、WordPressからフォーラムに簡単にアクセスできるようにしたいのです。WordPressでアカウントを作成しているので、それをプロバイダーとして使用します。

しかし、現在DiscourseのAIに問題があります。DiscourseConnectはGoogle、Microsoft、ローカルなどの他のすべてのログインを乗っ取るだろうと理解していました。しかし、AIはdiscourse connect allowed redirect domainsを設定すれば、それは真実ではないと強く確信しています。

まあ、私はそれを設定しました。それでも、他のログインオプションなしでWordPressにリダイレクトされます。

それで、AIの幻覚のために人生の2時間を無駄にしたのでしょうか、それとも何か間違ったことをしたのでしょうか?もし最初から私が正しく、DiscourseConnectが他のログインを許可しないのであれば、すぐに削除します。ヨーロッパのこの地域では、Googleログインなしで生活することは選択肢ではありません。

あなたの最初の考えは正しかった。AIは間違っていた:さらに見る

残念ながら、その通りです。

「いいね!」 1

インコグニートウィンドウでDiscourseサイトにアクセスすると、長いクエリ文字列がURLに含まれた状態でWordPressのフロントページにすぐにリダイレクトされ、ログインオプションが表示されません。SSOが機能するはずのセットアップガイドの手順に従いました。

これはこの段階で想定される動作でしょうか?
今、WordPress側(ログイン/登録など)の構築を完了させる必要があるだけでしょうか、それとも何か設定を誤ったのでしょうか?

マイクさん、ようこそ。標準のWordPressログインページにリダイレクトされるはずです。まず思い浮かぶのは、お使いのテーマ(またはプラグイン)がカスタムのログインページを提供していることです。普段のログインページはどのような見た目ですか?

アンガスさん、ありがとうございます!:slight_smile:

これはWordPressとDiscourseのクリーンインストールで、Twenty Twenty-Fiveテーマが有効になっています。あなたのビデオの手順にステップバイステップで従いましたが、シークレットウィンドウでDiscourseにアクセスすると、ログイン画面ではなくWordPressサイトにリダイレクトされ、テーマのホームページに着地してしまいます。

WordPressサイトは現在、開発環境にあるためディレクトリプライバシーで保護されていますが、これが通常のログインページへのリダイレクトに影響を与えている可能性がありますか?

マイクさん、現在のコードで正常に動作しているインストールの様子を撮影した短いビデオを共有します。

ビデオで示している設定とご自身のセットアップを照合してみてください。同じように設定しているにもかかわらず、まだ動作しない場合は、原因を特定するために一つずつ確認していくプロセスを進めましょう。

「いいね!」 1

Angis様

動画の作成、素晴らしいサポートをありがとうございます!

機密情報をぼかした各セクションのスクリーンショットを提供しました。

image

image

image

上記の画像では、実際には選択されていませんでしたが(おっと)、シークレットブラウザでフォーラムにアクセスすると、/wp-login.phpに自動的にリダイレクトされます。あなたが見ているようなフォーラムやログインボタンは表示されません。

image

すぐにwp-loginページに移動しても構いませんが、フォーラムへの直接アクセスができるのは常に嬉しいことです!

@angus わかりました… 最初の「何をしているんだ」の間に、これを設定してコミュニティをロックしていました。

image

ご迷惑をおかけして申し訳ありません、これは起動モードです :dashing_away:

素晴らしいサポートに改めて感謝します。また戻ってくると思います。

「いいね!」 2

解決してよかったです!

Angusさん、こんにちは。この問題についてお手伝いいただけないでしょうか。トピックに返信がありませんでした。

基本的に、ユーザーを匿名化すると、SSOプラグインが新しいアカウントを再作成してしまいます。ユーザーを個別に無効にして、新しいアカウントが作成されるのを防ぐ方法はありますか?また、誰かをBANまたは匿名化した場合に自動的に同期させることはできますか?

ユーザーを匿名化してから、メールアドレスをSSOのものにするのはどうでしょうか。あるいは、WordPressにそのユーザーを拒否させる(これが本当の解決策のようです。WordPressがユーザーを拒否すべきです)

WordPressで、ユーザーがSSO経由でログインするのを禁止するにはどうすればよいですか?それが解決策だと思います。

それはWordPressに関する質問ですね。:wink:

インターネットで調べたところ、その役割を「このサイトでの役割なし」に変更できるようです。

私が言いたかったのは、ユーザーがウェブサイトを引き続き利用できるようにしたいが、フォーラムアカウントを作成できないようにしたいということです。

私たちのフォーラムはウェブサイトとは別なので、迷惑行為でコミュニティから追放された人も、SaaSツールであるウェブサイトは引き続き利用できるようにすべきです。

それでしたら、Discourseでそれらを停止する必要があるでしょう。コンテンツを匿名化する必要がある場合は、それを行ってから、停止するアカウントを作成する必要があります。

@Shaunyさん、元のサポート投稿に返信しました。

「いいね!」 1