每次SSO登录时都会发送TL2欢迎消息

以下是正在发生的情况:

部分用户在每次登录时都会收到 TL2 欢迎通知(“您的信任等级已提升”)。

该问题在以下条件下出现:

  • 启用了 SSO 登录,且 Discourse 作为 SSO 客户端
  • 在 WP-Discourse 中启用了“同步用户数据”,导致每次用户登录 WordPress 时都会发出 sync_sso 调用
  • sync_sso 设置了一个具有 grant_trust_level 的群组,且该信任等级低于用户当前的信任等级

这会导致用户的信任等级被从头重新计算,并且每次登录时都会发送欢迎消息。

6 个赞

你好,

感谢分享此 bug!我尝试在本地重现此 bug,但未能成功,我的设置如下:


(Wordpress)

  • 设置 Wordpress 用户“Steaky”,邮箱为 steaky@cat.com
  • 添加 wpdc_custom_sso_params 以将 cats 组设置为所有使用 $params['groups'] = 'cats'; 登录的用户

(Discourse)

  • 创建用户“Steaky”,邮箱为 steaky@cat.com
  • 将 Steaky 设置为 trust_level_3(非锁定)
  • 创建组“cats”,并将“自动授予成员的信任级别”设置为“cats”的 2

Wordpress 和 Discourse 已连接 :ok_hand: 并且 :ballot_box_with_check: 同步了用户数据。

(Discourse)

  • 登录 Steaky,重定向到 Wordpress 并登录,然后重定向回 Discourse
  • (确认“cats”已设置为 Steaky)
  • Steaky 未看到欢迎消息

^ 使用 SiteSetting.discourse_connect_overrides_groups 重复以上步骤,结果相同。


我怀疑你的设置可能更复杂。如果你能分享更多关于受影响用户设置的详细信息,那就太好了:

  • 你还启用了哪些其他“Discourse Connect”站点设置?
  • 受影响的用户是否单独加入了可能授予他们某些信任级别的组?
  • 受影响用户的信任级别是否被锁定?他们属于哪种类型的组?
  • 任何其他有用的信息

谢谢!

4 个赞

这个 bug 已经存在一年多了,在此期间客户已经不再使用 Discourse,因此我无法完全复现。不过,我总是会做详细的笔记,所以我甚至还保留了当时的 SSO payload 记录。但我无法检查任何其他设置和/或在该确切实例上进行复现。

回到我的笔记。发生的情况与你现在做的略有不同。SSO 传递了一个空的 groups 字段(仅仅是 groups=)。但相关的用户属于一个 SSO 提供商未知的另一个组,该组强制其成员提升到 TL2。

此外,据我回忆,TL2 和 TL3 的欢迎消息行为不同,所以如果你尝试复现此问题,可能需要使用 TL2 而不是 TL3。

因此,要复现,我认为你需要执行以下操作:(请注意,我引入了第二个组)

(WordPress)

  • 使用电子邮件 steaky@cat.com 设置 WordPress 用户“Steaky”
  • 添加 wpdc_custom_sso_params 以设置所有登录用户的 dogs 组,并设置 $params['groups'] = 'dogs';

(Discourse)

  • 使用电子邮件 steaky@cat.com 创建用户“Steaky”
  • 让 Steaky 合法地成为 trust_level_1(非锁定)
  • 创建“cats”和“dogs”组,并将“自动授予成员的信任级别”设置为“cats”的 2 级
  • 让 Steaky 成为 cats 组的成员
2 个赞

您能进一步调查这个问题吗?

1 个赞

我上次回复后就暂停了对那个 bug 的探索,但我已经阅读了你的笔记,并且非常感激!你能有如此详尽的记录真是太不可思议了。它仍然在我待办的列表上,我很快就会重新开始处理它,所以感谢你的跟进。:smiley:

3 个赞