Внедрение сломано в 3.0.4 (stable)

У меня есть подозрение, что это изменение

нарушило работу встраивания на моём сайте. Не могли бы вы указать, что именно было изменено?

Я использую Discourse для создания тем для постов на своём блоге (в качестве системы комментариев). Мой сайт разделён на две части для двух языков, поэтому я использую два хоста, чтобы фильтровать английские (/blog/somepost) и немецкие (/de/blog/somepost) посты в разные категории форума.

Посты с немецкой части сайта больше не встраиваются после обновления моего Discourse. Я предполагаю, что это связано с вышеупомянутым исправлением.

Любая помощь в решении этой проблемы будет очень кстати.

2 лайка

С другой стороны, это может быть связано с какой-либо проблемой, например:

У меня тоже появляются такие DOMExceptions. Ещё раз, любая помощь будет очень ценна!

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 в настройках администратора, похоже, не решает проблему.

Так, в ветке main есть это:

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 лайка