SSO ログインによる新規ユーザー作成時の Discourse DB エラー

これはこのコードに関連しています:

ここで起きたことは、カテゴリユーザーのインデックスを以下のように修正したことです:

サイト設定で、両方とも「デフォルトで監視」かつ「デフォルトで追跡」されているグループがありますか?

以下を確認してください:default categories watchingdefault categories trackingdefault categories muteddefault categories watching first post

これで修正されます:

diff --git a/app/models/user.rb b/app/models/user.rb
index c1a94949a6..85b2ca9244 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1390,10 +1390,15 @@ class User < ActiveRecord::Base
     return if self.staged?
 
     values = []
+    # allocate set later
+    seen = nil
 
     %w{watching watching_first_post tracking muted}.each do |s|
       category_ids = SiteSetting.get("default_categories_#{s}").split("|").map(&:to_i)
       category_ids.each do |category_id|
+        seen ||= Set.new
+        next if seen.include?(category_id)
+        seen << category_id
         next if category_id == 0
         values << "(#{self.id}, #{category_id}, #{CategoryUser.notification_levels[s.to_sym]})"
       end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index cc50d88b2e..4075ee6194 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -1603,8 +1603,12 @@ describe User do
 
       SiteSetting.default_categories_watching = category0.id.to_s
       SiteSetting.default_categories_tracking = category1.id.to_s
-      SiteSetting.default_categories_muted = category2.id.to_s
+
+      # this is invalid, but we don't validate so ensure nothing breaks
+      SiteSetting.default_categories_muted = "#{category2.id}|#{category0.id}"
+
       SiteSetting.default_categories_watching_first_post = category3.id.to_s
+
     end
 
     it "has overriden preferences" do

ただし、この修正はあまり気に入っていません。サイト設定は保存時に重複がないことを検証し、不良データを移行すべきです。

@daniel あなたがこの新しい制約を導入したのだと思います。サイト設定を設定する際に検証を追加するフォローアップはどうでしょうか?

「いいね!」 3