private_messages_group 中的路由大小写错误

我对群组私有收件箱不太熟悉,也不确定如何复现此问题,但出现了以下情况:

  • 已为某个群组(我们称之为 ExampleGroup)设置了私有消息收件箱。
  • 该群组成员收到通知:“您的 examplegroup 收件箱中有 6 条消息”。
  • 点击该通知时,尝试加载 /topics/private-messages-group/username/examplegroup.json
  • 这导致报错。

我认为这是因为系统中没有名为 examplegroup 的群组,实际群组名称是 ExampleGroup

ListController::generate_message_route 执行了以下操作:

group = Group.find_by(name: params[:group_name])

如果将其改为:

group = Group.find_by(name: params[:group_name])
group = Group.where('lower(name) = ?', params[:group_name].downcase).first unless group

似乎可以解决问题。但我相信这并非根本原因。我认为在某个地方,本不应被转换的参数被错误地转为了小写。

大家有什么建议,应该从哪里入手排查吗?

3 个赞

如果你直接在控制台中创建通知,链接会保留大小写(即使数据是假的也能正常工作)

Notification.create!(
  user_id: 1,
  notification_type: Notification.types[:group_message_summary],
  data: { inbox_count: 5, group_name: "MyGroup", group_id: 41, username: 'angus' }.to_json
)

问题可能出在创建端,也就是帖子提醒器中:discourse/app/services/post_alerter.rb at main · discourse/discourse · GitHub

不过,我似乎无法复现这个问题。

1 个赞

感谢您的帮助!但那个链接不正确,不是 /u/username/messages/group/groupname,而是 /topics/private-messages-group/username/groupname。我找不到后者是从哪里来的,也不知道如何生成它。

2 个赞

我认为正确的修复方案是要求 URL 参数中的群组名称大写。已通过以下方式完成:

请注意,访问 /u/username/messages/group/groupname 会触发一个 AJAX 请求到 /topics/private-messages-group/username/groupname,因此 @angus 上面为调试此问题所采取的操作看起来是正确的。

感谢报告此问题 @RGJ :+1:

5 个赞