dbwhite
(Dwight Bumgarner)
2022 年 3 月 4 日午前 12:53
1
最近、私のチームと私は、WP Discourse プラグインがインストールされ、WordPress サイトが Discourse の SSO プロバイダーとして設定されている場合に、WordPress からユーザーの Discourse ユーザー名を編集できる機能を開発してきました。現在、Discourse API を使用してある程度の成功を収めています。WordPress にカスタムメタフィールドがあり、それが更新されると、サイトの Discourse インスタンスに PUT リクエストを送信してユーザー名を更新します(How does one change a username via the API? で提案されているソリューションに似ています)。
しかし、WP Discourse には、ここに示されている既存のオプションがあります。
これは、WordPress ユーザーが WordPress プロフィールページでこのフィールドを介して「Discourse ユーザー名」を編集できるようにしますが、
このフィールドは、投稿の公開(WP から Discourse へ)にのみ使用され、実際には Discourse のユーザー名を更新しません。ユーザーが Discourse でユーザー名を変更すると同期しますが、WordPress から Discourse に変更された場合には同期しません。
私の質問は、このような双方向同期は将来的に実装されるのでしょうか?同期されないユーザー名フィールドを変更できるようにするオプションがあるのはなぜですか?私のチームは、すでに進行中の機能ではない場合、この機能に貢献することにも関心があります。私たちのサイトはこの機能が必要であり、すべての WP Discourse サイトにとっても有用であると想像しています。これについて教えてください!
@angus @simon お二方とも WP Discourse に深く関わっており、SSO の問題で私たちを支援してくださったので、この質問を直接お二方にさせていただくのが適切だと思います!
「いいね!」 3
simon
2022 年 3 月 4 日午前 1:18
2
WordPress プラグインの「Discourse Username Editable」フィールドは、名称が不適切である可能性があります。この設定のコピーは、設定が何のために意図されているのかを明確にするために、更新する必要があります。
「Discourse Username Editable」設定が有効な場合、WordPress サイトのユーザーは WordPress プロファイルページで Discourse ユーザー名を設定できます。この設定が有効になっていない場合、WordPress サイトの管理者のみがユーザーの Discourse ユーザー名を設定できます。Discourse ユーザー名は、WordPress から Discourse への投稿を公開するためにのみプラグインによって使用されます。
WordPress と Discourse の間で DiscourseConnect が使用されている場合、ユーザーの Discourse ユーザー名は WordPress ユーザー名から初期設定されます。Discourse サイトで auth_overrides_username 設定が有効になっている場合、Discourse 上のユーザー名は WordPress からのみ設定できます。auth overrides username 設定が Discourse 上で有効になっていない場合、ユーザーは Discourse 上でユーザー名を編集できるため、両システム間でユーザー名が同期されなくなる可能性があります。
Discourse Username フィールドに関しては、理想的には、WordPress サイトが Discourse の SSO プロバイダーとして使用され、「WordPress の DiscourseConnect プロバイダーオプションタブで「ログイン時に Discourse ユーザーを作成または同期する」オプションが有効になっている場合、このフィールドは常にバックグラウンドで Discourse ユーザー名に基づいて設定されます。Discourse Username フィールドは、Discourse が WordPress の SSO プロバイダーとして使用されている場合(DiscourseConnect クライアント設定あり)にも自動的に設定されます。
理想的には、WordPress が Discourse の SSO プロバイダーである場合、「ログイン時に Discourse ユーザーを作成または同期する」オプションが有効になっているかどうかにかかわらず、Discourse Username フィールドは常に自動的に設定されます。両サイト間で DiscourseConnect が使用されていないケースについては、何もできないと思いますが、@angus はそれについてアイデアを持っているかもしれません。
デフォルトでは、WordPress はユーザーがユーザー名を変更することを許可しないため、これはあまり質問を受けていないことです。WordPress と Discourse の間でユーザー名を同期させたい場合は、Discourse 上で auth_overrides_username 設定を有効にしてください。また、WordPress 上で「ログイン時に Discourse ユーザーを作成または同期する」オプションを有効にすることも検討してください。このオプションが有効になっている場合、ユーザーは WordPress サイトにログインするたびに Discourse 上で更新されます。このオプションが有効になっていない場合、ユーザーは DiscourseConnect でログインし直すまで、Discourse 上で更新されません。
「いいね!」 3
dbwhite
(Dwight Bumgarner)
2022 年 3 月 4 日午前 1:44
3
simon様、返信と既存機能の説明ありがとうございます。
当サイトは少し特殊なケースかもしれません。WordPressではデフォルトでユーザー名が変更できないため、WordPressのユーザー名とDiscourseのユーザー名を同期させたくありません。また、このWPユーザー名編集機能を追加するプラグインをインストールすると不安定になる可能性があるため、導入したくありません。
しかし、Discourseではユーザー名を編集できるため、WP Discourseプラグインを通じてWordPressにもこの機能拡張を適用するのが理にかなっていると思います。このフィールドはまさにそのためのものだと思われますが、WordPressのユーザー名とはデフォルトで変更されないため競合する可能性があることは理解しています。したがって、この件についてプラグインへの貢献を望まないということでしょうか?
「いいね!」 1
dbwhite
(Dwight Bumgarner)
2022 年 3 月 4 日午前 1:46
4
また、フォーラムでユーザーがユーザー名を編集できるようにすることも、私たちにとって重要な要件です。Discourseではこれを許可するように設定済みですが、ほとんどのユーザーはDiscourseの設定内に隠れているため、Discourseのユーザー名を変更しません。WordPressサイトのプロフィールページで、名前、アバターなど他の情報と一緒に、目立つ場所に表示したいと考えています。
「いいね!」 1
angus
(Angus McLeod)
2022 年 3 月 4 日午後 12:34
5
いくつかの質問と注記
ただし、DiscourseConnect を使用しているため、新規登録時には同じになります。これは問題ないと考えており、同期自体(つまり、アカウント作成後)についてのみ懸念していると仮定します。
ユーザーが WordPress アカウントを作成し、まだ Discourse にサインインしていない場合のシナリオをどのように想定していますか? Discourse アカウントは存在しません。その場合、Discourse Username フィールドは編集不可になりますか?
「Update Userdata」Webhook(WP Discourse 設定の「Webhooks」を参照)は、Discourse でユーザー名が変更されたときに WordPress の Discourse Username を更新します。これは、あなたが想定している双方向同期の一部です。
具体的には、WP Discourse プラグインが、ユーザーの Discourse ユーザー名が変更されたときにそれを更新することを求めているということですか?
現在、そのフィールドはさまざまな人がさまざまな目的で使用しています。DiscourseConnect で使用しているアカウントに関連付けられた Discourse ユーザー名を更新せずに、そのフィールドを編集できるようにしたい人もいます。
ただし、比較的簡単な解決策があります。たとえば、here のあたりに action を追加して、現在のように PUT リクエストを使用して Discourse のユーザー名を更新できるようにします。最も簡単な方法は、WP プラグインのユーティリティにある抽象化された discourse_request メソッドを使用することです。
use WPDiscourse\\Utilities\\Utilities as DiscourseUtilities;
$path = ''
$args = array(
);
$response = DiscourseUtilities::discourse_request( $path, $args );
Webhook とアクションコールバックの両方を使用すると、上記の 2 つの質問を考慮した場合、想定しているような双方向同期が可能になります。
その方向での追加アクションを含む PR をレビューしてマージできることを嬉しく思います。
「いいね!」 4
dbwhite
(Dwight Bumgarner)
2022 年 3 月 7 日午前 2:50
6
実際には、wpdc_sso_params フィルターフックを使用してこの動作をオーバーライドしています。なぜなら、私たちのSSOシステムはFirebaseと統合されており、全員のWPのユーザー名がデフォルトでFirebase UIDになるため、Discourseのデフォルトを memberXXX(XXXは数字)に変更しているからです。将来的には、このデフォルトをユーザーの Firstname_Lastname に変更したいと考えています。しかし、はい、私たちの主な懸念は、ユーザーがWordPressサイト内のプロファイルページを通じて簡単にユーザー名を変更できることです。
この場合、ユーザー名フィールドを保存して、アカウントが作成されたときに同期させる(最初のSSOでの wpdc_sso_params フィルターフック経由)、またはWordPressサイトでサインアップしたすべてのメンバーに対してDiscourse API経由でDiscourseアカウントを強制的に作成できる、のいずれかの方法を考えています。後者のオプションの方が有利でしょう。なぜなら、全員がDiscourseアカウントを持っていることがわかり、特別なケースが少なくなるからです。しかし、私たちは本当にシームレスな体験を目指しているので、このユーザー名をプラットフォーム全体でのユーザーの認識するユーザー名にしたいのです。常に編集可能にしたいと考えており、将来的にはDiscourseだけでなく、リーダーボードなどでも使用する可能性があります。
はい、まさにこれが必要です!
承知いたしました!この方向性についてありがとうございます。私のチームと私は、まず私たちの実装でこれをテストし、すぐにPRを作成する予定です!
「いいね!」 2