bug: comment mentions silently fail for users whose display name contains square bracket

当被 @ 提及用户的显示名称中包含方括号(如 `John Doe[ Platform Team ]`)时,Langfuse 评论中的 @ 提及会被静默丢弃,不会发送通知邮件,也不会产生任何日志。优先检查用户显示名称是否包含 `[` 或 `]` 字符,这是触发该问题的直接原因。

快速结论:当被 @ 提及用户的显示名称中包含方括号(如 `John Doe[ Platform Team ]`)时,Langfuse 评论中的 @ 提及会被静默丢弃,不会发送通知邮件,也不会产生任何日志。优先检查用户显示名称是否包含 `[` 或 `]` 字符,这是触发该问题的直接原因。

适用环境:Langfuse(Web 前端与 Worker 后端);Issue 未提供具体的操作系统、Python、CUDA、显卡或依赖版本信息。

最快修复方案:暂无确认的一步修复方案。Issue 中提出了两种可能方案:一是修改正则表达式以允许方括号字符,二是从用户显示名称中移除方括号(需在每次 SSO 新用户注册时重新执行)。

注意事项:正则表达式修改方案需要注意防止 ReDoS 攻击,建议使用非贪婪匹配并锚定 `](user:` 模式;显示名称去除方括号的方案是临时性的,SSO 用户下次登录可能重新引入方括号。

问题场景

在 Langfuse 的评论功能中,用户尝试通过 @ 提及另一个用户,且被提及用户的显示名称(display name)中包含方括号字符(例如 `John Doe[ Platform Team ]`)。此时 @ 提及功能会静默失败——不会触发通知邮件,不会创建队列任务,也不会有任何日志输出。

报错原文

bug: comment mentions silently fail for users whose display name contains square bracket

原因分析

可能原因:Langfuse Web 前端的评论提及解析器使用了正则表达式来提取被提及的用户 ID。该正则表达式的显示名称捕获组明确排除了 `[` 和 `]` 字符:

@\\[([^[\\]]{1,100})\\]\\(${MENTION_USER_PREFIX}([a-z0-9_-]{1,30})\\)

由于 `[^[\]]{1,100}` 无法匹配包含方括号的显示名称,导致 `extractUniqueMentionedUserIds()` 返回空数组,`validMentionedUserIds` 最终为空,整个提及过程被静默跳过。

此外,Worker 端的正则表达式使用 `[^\]]+`(仅排除 `]`),与前端模式不一致,进一步加剧了问题的不可预测性。

环境排查

  • 确认被提及用户的显示名称是否包含 `[` 或 `]` 字符。
  • 检查 Langfuse Web 前端与 Worker 版本是否一致(代码不一致可能导致行为差异)。
  • 如使用 SSO 登录,确认显示名称来源(如 IdP 属性映射)是否可能引入方括号。

解决步骤

  1. 确认触发条件:检查被提及用户的显示名称,确认是否包含方括号。可在用户管理界面查看或通过数据库查询。
  2. 临时规避(可优先尝试):修改用户显示名称,移除其中的方括号字符。注意:SSO 用户在下一次登录时可能重新同步显示名称,需重复处理。
  3. 修复正则表达式(需代码修改):修改 web/src/features/comments/lib/mentionParser.ts 中的 MENTION_REGEX,将显示名称捕获组改为非贪婪匹配并锚定到 ](user: 模式,例如:(.{1,100}?) 后跟 \\]\\(user:,同时保留长度限制以防止 ReDoS。
  4. 同步修改 Worker 端:调整 worker/src/features/notifications/commentMentionHandler.ts 中的正则表达式,确保与前端模式保持一致。

验证方法

修复后,在评论中 @ 一个显示名称包含方括号的用户(如 `John Doe[ Platform Team ]`),确认:
1. 被提及用户收到通知邮件;
2. Worker 日志中出现对应的队列任务或处理记录;
3. 失败场景不再静默通过(至少应产生日志或错误提示)。

参考来源

langfuse/langfuse #14836

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20467

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注