WP-Discourseの最新アップデートで予期せぬ動作が発生しています

WP-Discourse プラグインへの最新のコミットにより、すべてのカスタム投稿 (EventON プラグイン経由で作成されたもの) が、Discourse と WordPress の両方に存在するにもかかわらず、system ユーザーに帰属するようになっています。

2.3.7 にロールバックすると期待どおりに動作しますが、2.3.8 に更新するとこのバグが発生します。

メールでこのエラーを受信します。

失敗の理由:
 Discourse から 400 レスポンスコードが返されました。
 param が欠落しているか、値が空です: post
 意味は? post
        post[raw]
        controller
        title

原因特定に役立つかと思いました。

参照しているプラグインへのリンクを共有していただけますか?また、WP Discourse のログに何か表示されていますか?

こんにちは @angus

プラグインはこちらです: https://www.myeventon.com/

プラグインのv2.3.7またはv2.3.8のログが必要ですか?

「いいね!」 1

両方可能であれば。詳細な公開ログをオンにしてください。

v2.3.7:

[2022-02-21 08:07:11] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 
[2022-02-21 08:07:11] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Test Event","wp_author_id":"3958","wp_post_id":126070,"discourse_post_id":""} 

投稿は2.3.7で、WordPressとDiscourseの両方で私のユーザーアカウントに正しくリンクされました。

v2.3.8:

[2022-02-21 08:10:15] publish.INFO: create_post.post_success {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 
[2022-02-21 08:10:15] publish.INFO: create_post.body_valid {"wp_title":"[Please Ignore] Another test event","wp_author_id":"3958","wp_post_id":126071,"discourse_post_id":""} 

投稿は2.3.8で、WordPressでは私のユーザーに、Discourseではシステムユーザーにリンクされました。

「いいね!」 1

いくつか確認させてください。

  1. カスタム投稿タイプ(イベントなど)は正常にDiscourseに公開されていますか?
  2. 以前に400エラーを見たことはありますか?
  3. 投稿を公開しているユーザーの種類(Discourseのユーザー名を想定)は何ですか?管理者ですか、それともそうではありませんか?
  4. WordPressとDiscourseを接続するために使用しているAPIキーの種類は何ですか?

はい、投稿は正常に公開されていますが、v2.3.8では誤ったユーザー(システム)が割り当てられています。

いいえ、wp-discourseプラグインの以前のバージョンでは400エラーは発生していませんでした。

これらのユーザーはWordPressの管理者ではない登録ユーザーであり、これまでは正常に機能していました。どのユーザーもDiscourseで正しくリンクされていました。

グローバルAPIキーです。

「いいね!」 1

このPRがマージされ(そしてバージョンがWordpress.orgにプッシュされると)、期待どおりに機能するようになります。

「いいね!」 2

同じエラーが発生しており、WP Discourse をバージョン 2.3.8 にアップグレードした後に発生したことを確認できます。

このバージョンでは、トピックは作成されますが、デフォルトのユーザーで作成されます。

確認のため、WP Discourse を 2.3.7 にロールバックしたところ、正常に動作しました。

「いいね!」 2

ありがとうございます。このPRがマージされた際に対応されます。PR がマージされた際に、対応されます。また、以下の2つの質問も確認していただけますでしょうか。

  • 投稿を公開しているユーザーの種類(使用されることを想定しているDiscourseのユーザー名)は何ですか?(例:管理者かどうか)
  • WordPressとDiscourseを接続するために使用しているAPIキーの種類は何ですか?

ここでも同じ問題が発生しています。カスタム投稿タイプではありません。

管理者ユーザーではなく、モデレーターです。
「全ユーザー」APIキー。

  • ユーザーはモデレーターであり、一部は管理者です
  • API「全ユーザー」

皆さん、バージョン2.3.9がリリースされ、この問題が修正されました。アップデートして、状況をお知らせください。

「いいね!」 1

2.3.9でも同じ問題が発生しており、2.3.7にロールバックし、今後このプラグインの自動更新を無効にします。

「いいね!」 1

こんにちは、@angus さん

お騒がせして申し訳ありません。WordPress 5.9.1 と WP Discourse 2.3.9 で問題が解決したようです。

しかし、Discourse が公開された各投稿で追加の処理を行っており、後から System ユーザーから公開ユーザーに所有権が移行されているように見えます。

「いいね!」 1

@orenwolf 様、まだ問題が解決していないとのこと、申し訳ありません。投稿者の名前で公開されることを期待しているユーザーのWordPressプロフィールに「Discourse Username」が設定されているか確認していただけますでしょうか。


皆様、この件にご協力いただきありがとうございます。私のテスト環境(様々なサイトおよびプラグインの単体テスト)では、「Discourse Username」機能は「2.3.9」で期待通りに動作するようになりました。もし、まだ問題が発生している場合は、プラグインが最新バージョンであることを確認し、投稿の作成者として期待しているユーザーに「Discourse Username」が設定されているかご確認ください。

なぜこの問題が発生したのか疑問に思われるかもしれません。背景を説明することで(@itsbhanusharma 様のご質問にもお答えできます)、理解が深まるかと思います。以前は、この機能は「Api-Username」ヘッダーで異なるユーザーを使用していました(こちらを参照)。これは、Discourseの関連エンドポイントが、APIリクエストを実行するユーザーとは異なる投稿の作成者を設定することをサポートしていなかったため、必要とされていました。

その結果、この機能が機能するのは、「All Users」APIキーと「Global」スコープを持っている場合のみでした。WP DiscourseプラグインのAPIキー作成に関する標準的な手順は、しばらくの間以下のようになっています。

まだAPIキーを作成していない場合は、「New API Key」をクリックし、User Levelを「Single User」に設定し、「User」を管理者アカウントに設定し、「Global Key」を選択して「Save」をクリックします。APIキーをコピーしてここに貼り付けます。

これらの手順に従うと、この(文書化されていない)機能は機能せず、様々なサイトで問題が発生していました。

さらに、様々なセキュリティ上の理由から、私はプラグインに変更を加え、より限定的なAPIキーを使用できるようにしてきました。これにはDiscourseの変更が必要ですが、(マージされれば)プラグイン管理者は新しい、はるかに限定的なAPIキーを発行できるようになります。その際には改めてお知らせいたします。

はい、@itsbhanusharma 様、この機能は現在、投稿が作成された後に投稿の所有者を変更するために2回目のリクエストを行うことで機能します(「Discourse Username」が存在する場合)。これは実際、上記の「Api-Username」と「All Users Global Key」を使用することなく、Discourse API経由で投稿の所有者を任意に設定する唯一の適切な方法です。この操作の性質を考慮すると、パフォーマンス上の懸念はないはずです。

「いいね!」 4

パフォーマンスの懸念ではなく、投稿の上部にある鉛筆アイコンが正常であり、それが今後も続くことを、あまり詳しくない人々に説明するのが面倒だということです。

時間がかかりますが、最終的には慣れるでしょう。

投稿が編集済みとして表示されるのは少し気になりますが、すべてが機能する限り問題ありません。

しかし、通知が間違っているのは問題です。システムユーザーが新しい投稿を作成したことを示しています。

これまでのところ、これは解決策ではなく、単なるハックのように感じられます。適切なユーザーとして自動的に投稿できなくなるのは、明らかに大きな後退です。これが最初に壊れた原因がよくわかりません。

要約すると、プラグインがさまざまな理由、特にテストとセキュリティのために、すべてのリクエストを Discourse で処理する方法を徐々に変更してきました。変更の完全なコンテキストと根拠は、ここで説明するには長すぎます。この特定の機能のコンテキストでは、「壊れていないなら直すな」のように感じられるかもしれませんが、より広範なコンテキストがあります。

これらの変更はしばらく(数ヶ月)続いていますが、今回表面化している理由は、2.3.8 リリースで間違いを犯したためです。そのため、そのリリースに含まれるべきだった変更を 2.3.9 に含めました。

とはいえ、@jtbayly @itsbhanusharma、この特定の機能に対する異なるアプローチについてのフィードバックを承知しています。ハックのように感じられるかもしれませんが、そうではありません。それにもかかわらず、皆様のフィードバックを踏まえ、ご希望であれば設定で有効にできる形で、既存の方法をプラグインに戻します(2.4.0 で公開されます)。数日中にマージされたら、その旨を追って通知します。

皆様が提起された問題に対処できれば、このアプローチを完全に削除できる見込みです。おそらく、discourse/discourse にさらに変更を加えることになるでしょう。前述のとおり、来月中にプラグインが API キーを処理する方法の変更について、より大きな発表を行う予定です(discourse/discourse への変更がいつマージされるかによります)。これには、この件の側面も含まれます。

「いいね!」 4

私がこれを言ったとき、他に前進する方法があるかどうか確信が持てなかったことを認めるつもりでした。「なぜそれを壊したのか!」というコメントではありませんでした。

WPプラグインを最新のコアDiscourseで動作させ続けるあなたの仕事に非常に感謝しています。そして、この分野での改善を可能にするコアへの(おそらく)変更が来ることを非常に嬉しく思っています。

「いいね!」 1