DiscourseConnect を使用しない場合の discourse_username 入力

これは古い GitHub の問題に関する質問でしたが、ここではメタでより簡単に追跡できます。

https://github.com/discourse/wp-discourse/issues/237

@mattdm より:

OpenID をログインに使用していますが、そのオプションは DiscourseConnect を使用している場合にのみ利用可能のようです。他に方法はありますか?手動で入力するのは非常に面倒です。

Discourse サイトでは、ユーザーがメールアドレス (SSO とは別) を編集することは許可していますが、ユーザー ID は同じであることが保証されています。

私の最初の返信 (質問はまだ未解決です)

@mattdm さん、いくつか明確にしていただけますか?

  1. WordPress と Discourse のアカウント間で、ユーザーのメールアドレスが異なる場合がありますか?
  2. 「ユーザー ID は同じであることが保証されている」とはどういう意味ですか?どのユーザー ID について話していますか?
「いいね!」 2

すみません、以前に回答したと思っていましたが、そうではなかったようです。考えただけかもしれません!いずれにせよ:

  1. メールアドレスは、WordPressとDiscourseの両方で、最初にSSOから同期されます。しかし、多くの要望があったため、Discourseではメールアドレスを変更できるようにしています。(ログインに直接関連付けられたメールアドレス以外の場所にDiscourseの通知を送信したいという要望は頻繁にあることが判明しました。)WordPressのメールアドレスを変更することも可能ですが、それを実行した人がいるのか、あるいはそのインスタンスで送信メールが機能するのかさえ知りません。

  2. 「ユーザーID」とは、「ユーザー名」のことです。ユーザー名は、DiscourseとWordPressの両方で常に[1]SSOから取得され、どちらの場合もユーザーが変更することはできません。私には不明な理由ですが、おそらく当時は理にかなっていたのでしょう、これはSSO側ではnicknameであり、oauth2 json username pathにマッピングされています。


  1. 実際には、SSOが導入される前に設定された私のもののようなアカウントがいくつかあり、それらは間違っています。私はmattdmではなく「Matthew Miller」になっています。しかし、それは修正できます。 ↩︎

hm ok、つまり実質的に

  1. WordPressとDiscourseでメールアドレスが異なるユーザーのサブセットが存在することになります。
  2. ユーザー名は、IDプロバイダーによってWordPressとDiscourseの両方に提供されるため、同じであることが保証されます。

WP DiscourseユーザーWebhookをDiscourseConnect機能から切り離した場合(可能)、ユーザーマッチングはユーザー名ではなくメールアドレスに基づいて行われます。あなたの状況は、ID設定にやや特有なものです。

WordPress側でカスタムコードを使用して処理する方が良いケースだと思います。やりたいことは次のようになります。

function update_discourse_username( $user_login, $user ) {
    update_user_meta( $user->ID, 'discourse_username', $user_login );
}
add_action( 'wp_login', 'update_discourse_username', 10, 2);

基本的に、ログイン後にWordPressのユーザー名として「discourse_username」メタフィールドを割り当てます。これは、両者が同じであることが保証されているためです。WordPressのコードでは、「user_login」が「username」と呼ばれることがあることに注意してください。

数年後にこれに戻ってきました。:slight_smile:

いつの間にか、(oauth2) SSO からメールアドレスが強制同期されるように変更しました。そのため、その方法で一致させることができるはずです。(また、何らかの理由で不一致があったとしても、メールが 他人 に属するようなケースはないはずなので、最悪の場合は失敗するだけですよね?)

WP Discourse ユーザー webhook が「ただ動く」ようにする可能性はありますか?

それが無理な場合… 私は WP の専門家ではなく、WP はホストされているため、プラグインをカスタマイズする簡単な選択肢はないと思います。

CC @jwheel

確認のため、以下に記載します。

これはもう該当しないということでしょうか?

現在機能しているという点について、補足しておきます。これは新しい機能についてのご要望です :slight_smile:

さらに、これは非常に慎重に検討する必要がある新しい機能でもあります。数年前に可能だと申し上げましたが、現在、プラグインのコア機能としてこれを行うことには少し懐疑的です。なぜなら、そのような機能はWordPressでメールアドレスが適切に検証されていることを前提とする必要があるからです。これは必ずしも安全な前提ではありません。

それは(WordPressのメール検証は)サイト管理者の責任ですが、オープンソース開発の原則は、環境を制御できない場合に、一部(たとえ少数であっても)のケースで悪い結果を引き起こす可能性のあるものを作成することを避けることです。この問題はまだ存在しますが、DiscourseConnectに限定されている場合は軽減されます。

より詳しく検討し、今週中に改めてご連絡します。

「いいね!」 1

メールのマッチングが複雑すぎる場合、「Discourseのユーザー名は常にWordPress(およびその逆)と一致する」ということは、それほど珍しいことではないように感じます。

ユニークなユーザー名を前提とするSSOシステムを持っていない人でも、たとえば数十人のWordPressユーザーがいるような小規模なサイトでは、慣習的にこれが真実である場合がきっと多いはずです。

これには既存の解決策があります。DiscourseはWordPressのDiscourseConnectプロバイダーとして設定できます(通常の構成とは逆)。設定は簡単です。有効にすると、ユーザーのメールアドレスに基づいてWordPress/Discourseアカウントを同期できるオプション設定があります。

ユーザーのプロフィールページにリンクも追加されます。


(編集:画像にキャプションを付けることは可能ですか?)

現在テスト中ですが、プロフィールページのリンクをクリックしてもDiscourseのユーザー名フィールドが入力されません。入力されるべきです。ログインページに追加できる「Discourseでログイン」リンクをクリックすると、Discourseのユーザー名フィールドが自動的に更新されます。

アカウント同期の目的は、Discourseのユーザー名フィールドを安全な方法で更新することだと思いますので、何が起こっているのか確認する価値はあるでしょう。また、WordPressで「未確認」のメールアドレスを持つアカウントがDiscourseとアカウントを同期できるという問題もあるようです。これはデフォルトでは許可されるべきではないでしょう。

あなたのケースでは、ユーザーがDiscourse経由でWordPressにログインすることを許可したくないかもしれません。プロフィールページのリンクを使用して、Discourseのユーザー名フィールドが自動的に入力されるようにアカウントを同期させることができます。これが機能するために、Discourse経由でWordPressにログインすることを有効にする必要はありません。

このアプローチの潜在的な欠点は、ユーザーがそれを開始する必要があることです。管理者がユーザーのDiscourseユーザー名を取得するためにクリックできるボタンは提供されません。

それは馬鹿げているように思えます。中央集権化されたSSOがあります。連携させるために、一部のサービスで他のランダムなサービスを認証プロバイダーとして設定する必要はありません。それは狂気の道です。

DiscourseConnect という名前に惑わされないでください)。私が説明した機能が正常に機能していれば、WordPress ユーザーが対応するメールアドレスを持つ Discourse アカウントを持っていることを確認し、WordPress で Discourse ユーザー名を自動入力するための単なる方法になります。サイトの認証システムには影響しません。

コアプラグインには、設定を介しても、WordPressユーザー名とDiscourseユーザー名を一致させるIDメカニズムは決して存在しません。このコンテキストでの唯一の可能性は、メールアドレスの一致です。ユーザーWebhookのフォールバックメカニズムとしてメールアドレスの一致を追加することにしました。数週間以内にリリースされる次のバージョンに含まれます。

「いいね!」 1

これでループを閉じますが、プラグインの最新バージョン 2.5.4 には Webhook のさまざまな更新が含まれており、その中には「メールでユーザーを照合する」設定で DiscourseConnect が不要になったことも含まれます。さらに詳しい情報は以下をご覧ください。

「いいね!」 1

これで問題は解決すると思います。少なくとも99%のケースで。ありがとうございます!!!

@jwheel 参考までに、サイトでこれを有効にしました。

「いいね!」 2

素晴らしい、プラグインを使った今後のトピックに注目します。

「いいね!」 2