SSO 用に WordPress(および WooCommerce)で検証されたアカウントを Discourse に認識させる方法

How to turn off Discourse email verification? の議論を続けます:

Discourse が当社の認証済みアカウントを認識していません。現在のサイト設定に関するコンテキストを以下に示します:

WP Discourse プラグインを使用しており、WP を SSO プロバイダーとして利用しています。

現在の SSS 設定 <img>

現在、新しいユーザー登録の管理には WooCommerce (WC) を使用しています。URL: https://pickleballist.com/my-account

Booster for WC というプラグインを使用しており、これにより WC に追加機能が付与されます。具体的には、ユーザーがアカウントにアクセスする前にメール認証を必須とする機能が含まれています。

プラグインオプション <img>

受信した認証メール <img>

ユーザーがアカウント有効化メール内のリンクをクリックすると、WordPress の /my-account/ ページにリダイレクトされます。認証リンクをクリックせずに登録時の資格情報でログインしようとすると、アカウントの認証が必要であると表示され、「認証メールを再送信する」リンクが提供されます。

管理コンソールの「ユーザー」ページにアクセスすると、どのアカウントが認証済みで、どのアカウントが未認証かが一目でわかります。

認証状態が示されたユーザーアカウント <img>

残念ながら、ユーザーがメールを認証した後、https://forums.pickleballist.com のフォーラムにアクセスしても、自動的にログインされません。:disappointed_face: さらに最悪なことに、フォーラムの「ログイン」ボタンをクリックすると、メールを確認して Discourse の「新しいアカウントを確認する」メールリンクをクリックする必要があります。

WooCommerce から送信されるメタデータに基づいて、Discourse が実際に認証されたユーザーを確認する方法はありませんか?

おそらくこの「メール認証モジュール」は wp_new_user_notification には触れていないのでしょう。そうであれば Discourse はそれを認識できたはずです。Discourse に別のフックを参照させることは可能でしょうか?

ご教示をお待ちしています!

@simon 今、あなたのコメントに気づきました:

あの :up_arrow:︎ コードスニペットを使うことが、私が達成しようとしていることの解決策になりますか?

Booster for WC プラグインが、ユーザーがメールアドレスを確認するまで WordPress へのログインを禁止する限り、そのコードは安全に使用できます。これをテーマやプラグインに追加することで、ユーザーはメールアドレスを再確認することなく Discourse サイトにログインできるようになります。

これも可能です。WooCommerce によって設定されるメタデータキーの名前と、確認済みのメールアドレスを持つユーザーに対して期待される戻り値が分かれば、そのチェックを関数に追加できます。以下のような形です。

add_filter( 'discourse_email_verification', 'wpdc_custom_discourse_email_verification', 10, 2 );
function wpdc_custom_discourse_email_verification( $require_activation, $user_id ) {
    if ( 1 === get_user_meta( $user_id, 'wc_metadata_key', true ) ) {
        $require_activation = false;
    }

    return $require_activation;
}

WooCommerce に関連して SSO ログインのリダイレクト問題に直面している場合は、GitHub - scossar/wp-discourse-woocommerce-support: Integrates the wp-discourse plugin with WooCommerce · GitHub のプラグインをサイトにインストールする必要があるかもしれません。その機能の詳細については、プラグインの readme をご覧ください。

そのコードで解決しました!これでユーザーはWPが生成した認証リンクをクリックするだけで済むようになりました。:folded_hands: ありがとうございます!

このプラグインを追加しましたが、ユーザーが WP が生成した認証リンクをクリックしても、認証後は WP の /my-account ページに移動するだけで、Discourse フォーラムには戻りません。ここで期待される動作は何でしょうか?

確認リンクは「Booster for WC」プラグインによって生成されていると思われます。その場合、私がテストした範囲外の問題となります。「wp-discourse-woocommerce-support」プラグインが解決することを意図しているのは、WooCommerce によってすべてのログイン試行時に設定されるログインリダイレクトを上書きすることです。私は最近 WooCommerce でのテストは行なっていませんが、過去には、WooCommerce がサイトにインストールされている場合、WordPress 経由でログインしようとする非ログインユーザーが Discourse にリダイレクトされるのを妨げていました。

期待される動作は、WordPress にログインしていないユーザーが、Discourse 上のログインボタン、または Discourse に公開された投稿の下に生成された SSO ログインリンクのいずれかをクリックした場合、ユーザーが WordPress のログインプロセスを経て、正しい Discourse の URL にリダイレクトされることです。メールアドレスを確認済みのユーザーに対してこの動作が正しく機能していない場合は、お知らせください。

ユーザーがクリックしている確認リンクでも動作するようにできるかもしれませんが、これは別の問題だと思います。