3.0.4 (安定版) で埋め込みが壊れています

この変更により、ウェブサイトでの埋め込み方法が壊れたのではないかと疑っています。

具体的に何が変更されたのか教えていただけますか?

私はDiscourseをブログの投稿(コメントシステムとして)トピックの作成に使用しています。私のウェブサイトは2つの言語に対応するために2つの部分に分かれており、英語の投稿(/blog/somepost)とドイツ語の投稿(/de/blog/somepost)を異なるフォーラムカテゴリにフィルタリングするために2つのホストを使用しています。

ウェブサイトのドイツ語側からの投稿は、Discourseが更新されてから埋め込まれなくなりました。これは上記のパッチに関連していると思われます。

この問題を解決するためのご協力をお願いいたします。

「いいね!」 2

一方で、この問題かもしれません。

確かに、これらのDOMExceptionが表示されます。重ねてのお願いですが、どのような助けでも大変感謝いたします!

「いいね!」 1

フォーラムと埋め込みサイトのセキュリティポリシーと設定を確認します。スクリーンショットは問題なさそうです。使用しているスクリプトと、その他の埋め込み設定はどうなっていますか?最近何か変更しましたか?

私のフォーラムでは、この埋め込み投稿機能が1日に複数回使用されており、現在は問題なく動作しているので、壊れているわけではありません。最新のベータ版を使用しており、ホスティングされているため、構成には自信があります。

「いいね!」 1

こんにちは、助けようとしてくれてありがとう!

どちらのサイトもホスティングプロバイダーによってホストされているため、セキュリティポリシーを管理していません。プロバイダーがこれを壊したとはあまり思えませんが、Discourseホスティングプロバイダーに確認してみます。

ブログ(Hugoという静的サイトエンジンです)では、このスクリプトを使用しています。

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'https://forum.fab.industries/',
                     discourseEmbedUrl: '{{ .Permalink }}' };

  (function() {
    var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
    d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
  })();
</script>

数ヶ月前に初めて統合して以来、何も変更していません。

変更したのは、フォーラムのテーマに追加したわずかなカスタムCSSだけです。今日それを元に戻して、問題が解決するかどうか確認します。

わかりました。CSSをロールバックしても何も起こりませんでした。どうせ無理な賭けでした。

埋め込みが全体的に壊れていることも確認できました。ブログの英語側も動作しなくなりました。新しいページは「ディスカッションを読み込み中…」で止まっています。

プロバイダーがフォーラムを3.0.4にアップデートしたときにこれが壊れたとほぼ確信していますが、どのバージョンからアップデートされたのかはわかりません。そのため、このパッチが原因ではないかと疑っています。

ブラウザがこれらのDOM関連のエラーを吐き出しているのは偶然ではないと考えています。

管理者設定でCSPを無効にしても、問題は解決しないようです。

メインにはこれがあり、

TopicEmbed.import_remote(@embed_url, user: User.find_by(username_lower: username.downcase))

stableにはこれがあります。

TopicEmbed.import_remote(user, @embed_url)

パラメータの順序に注意してください。

セキュリティパッチのバックポートにより、stableで関数シグネチャが変更されました

def self.import_remote(import_user, url, opts = nil)

def self.import_remote(url, opts = nil)

となり、urlパラメータがUserオブジェクトを受け取るようになりました。

関数呼び出しを変更することで問題が解決します。

diff --git a/lib/topic_retriever.rb b/lib/topic_retriever.rb
index b798df6cd7..6186ce5868 100644
--- a/lib/topic_retriever.rb
+++ b/lib/topic_retriever.rb
@@ -50,6 +50,6 @@ class TopicRetriever
     user = User.where(username_lower: username.downcase).first
     return if user.blank?

-    TopicEmbed.import_remote(user, @embed_url)
+    TopicEmbed.import_remote(@embed_url, user: user)
   end
 end

@blake

「いいね!」 8

この問題を修正するPRを提出しました FIX broken topic embedding because of incomplete security patch (#22088) by communiteq · Pull Request #22184 · discourse/discourse · GitHub

「いいね!」 9

修正ありがとうございます、@RGJ さん。そのPRはマージされました。

「いいね!」 4