既存のDiscourseユーザーに接続する新しいWordPressユーザー

tl;dr - 新しいWordPressユーザーが注文またはサインアップすると、Discourseの既存ユーザーを上書きまたは接続しているようです。トラブルシューティングの方法がわかりません。

背景:

  • WordPressをDiscourseConnectプロバイダーとして、SSOにwp-discourseプラグインを使用しています。
  • Digital OceanドロップレットでホストされているDiscourseコミュニティを立ち上げました。
  • wp-discourseプラグインでSSOを接続してDiscourseコミュニティを立ち上げたとき、WordPressはAWS Lightsailでホストしており、Pleskをコントロールパネルとして使用していました。
  • 今年初めにNexcess WordPressマネージドホスティングに移行しましたが、Discourseコネクタはそのまま機能しているようです。
  • 新しいWordPressインストールにユーザーを移行しませんでした。エクスポート済みで、まもなくインポートする予定です。
  • 大きな調整を行っているため、WordPressサイトはしばらく閉鎖されていました。

過去数ヶ月間、WordPress(WooCommerce)で多くの人が注文を行っており、奇妙なことに気づきました。WordPressのユーザーアカウントでDiscourse Usernameフィールドを見ると、そのユーザー名がDiscourseの既存ユーザーのものになっているのです。何らかの理由でDiscourseへの接続がうまくいっていないようです。今日サインアップしたユーザーのDiscourse Usernametennisdpmですが、これは既存ユーザーであり、2020年にサインアップしたユーザーです。:thinking:

まもなく、古いWordPressインスタンスにアカウントを持っていたすべてのユーザーを移行(追加)し、新しいインスタンスに追加する予定ですが、既存ユーザーと新規サインアップユーザーとの間に競合があるように見えるため、継続的な競合を防ぎ、新しいWordPressユーザーが参加したときに既存のWordPressユーザー(一意の識別子としてメールを使用)をDiscourseユーザーと同期し、新しいSSO Discourseアカウントをプロビジョニングするための行動計画を立てたいと考えています。

どのように進めるべきか、ご支援とご指導をいただけると幸いです!

既存のwp-discourse接続SSO設定:

新しいWPユーザーが、既存のDiscourseConnect外部IDに対応するユーザーIDを取得しているようです。

「いいね!」 2

おお、すごい!@omarfilip、お知らせありがとうございます!これをリセットしたり、今後発生しないようにする方法はありますか?あるいは、すべての旧ユーザーの移行が完了するまで、これをオフにすることはできますか?

どのようにアプローチするのが最善なのか、本当にわかりません。修正が必要なレコードはいくつありますか?

現在、WPに約80人のユーザーがおり、それらを現在関連付けられていると思われるDiscourseユーザーから「切り離す」必要があります。また、古いインスタンスからインポートする必要があるユーザーが約750人おり、現在発生しているような問題が発生していないことを確認する必要があります。

WPのアカウントは、外部/ユーザーIDではなく、電子メールアドレスを一意の識別子としてDiscourseアカウントとリンクしていることを期待していました。

Hey @jord8on、Discourse のマッチング機能は、まず外部 ID (現在は WordPress データベースを変更したため、異なるユーザーを指しています) でマッチングを試み、次にメールアドレスでマッチングを試みます。ID を最初に使うのには、いくつかの正当な理由があります。メールは分散型 ID としてはあまり適していません。

そのため、古い WordPress データベースを使用していた際に作成された Discourse のシングルサインオンレコードを削除する必要があります。日時を使用して特定できます。たとえば、Discourse インスタンスで次のような操作を行います。

./launcher enter app
rails c
SingleSignOnRecord.where("created_at < ?", 1.month.ago) // これが期待通りか確認
SingleSignOnRecord.where("created_at < ?", 1.month.ago).delete_all

新しいデータベースにインポートされた古いユーザーは、既存の Discourse アカウントとメールアドレスでマッチングされます (新しい WordPress ID は SSO レコードと一致しないため)。

また、WordPress からすべての discourse_username データを削除し、ユーザー Webhook を介して自動的に再同期させることをお勧めします。これを実行する必要があります (おそらく WP CLI を使用して)。これにより、discourse_username メタフィールドのエントリがすべて削除されます。

delete_metadata( 'user', 0, 'discourse_username', '', true );

後でこの情報を見る人のために、DiscourseConnect を 1 つの WordPress データベースで使用していて、移行なしで完全に新しい WordPress データベースに移行する場合、このような問題が発生します。このような変更を行う前に、サポートを求めてください。

「いいね!」 2