包含 Unicode 字符的分类 slug 导致重定向循环

我已在用户名中启用了(部分)Unicode 字符,一切运行正常。

当我尝试在分类 slug 中使用 Unicode 字符时,系统将其转换为百分号编码并允许我保存更改,但我无法再访问该分类的主题列表,因为会收到 ERR_TOO_MANY_REDIRECTS 错误。

我似乎已通过 Rails 控制台解决了该问题:

Category.find(id).update(slug: ‘slug-without-unicode’)

这并非致命问题,但可能导致功能异常,因此建议要么完整实现该功能,要么加以防护。

3 个赞

过去曾针对此问题做过一些工作,但我认为你遇到的情况尚未得到解决。我认为发生的情况是:你将 slug 生成方法 设置为 “ascii”,却直接输入了包含非 ASCII 字符的分类 slug。我可以在自己的网站上复现该问题,条件是 slug 生成方法 设置为 “ascii”,并在分类 slug 字段中直接输入以下文本(yetersizliği):

保存分类后:

随后尝试加载该分类列表时会失败。

如果我不在分类 slug 字段中输入任何内容,当 slug 生成方法 设置为 “ascii” 时,Discourse 会正确生成 slug。

slug 生成方法 设置为 “encoded” 时,无论我留空分类 slug 输入框,还是直接输入非 ASCII slug,Discourse 都能正确生成 slug。

因此,问题似乎在于:当 slug 生成方法 设置为 “ascii” 时,分类 slug 字段仍然允许输入非 ASCII slug。这会导致重定向问题,而该问题只能通过 Rails 控制台修复。

6 个赞

所以我们需要在这里保存时进行模型验证,对吧?

我可以来负责。

5 个赞

我确实是这样做的。我正在编辑一个之前已创建的分类,包括其名称和 slug。我并不知道“slug 生成方法”这个设置,尽管后来我发现它被设为了“ascii”,但 slug 仍然被编码了。

这种强制转换或许有一定道理,但前提是编码后的 slug 之后能够被识别,即以类似方式忽略该设置。

1 个赞

这应该能解决问题

10 个赞

3 篇帖子已拆分至新主题:Unicode 用户名导致个人资料页面加载错误

上述 PR 已合并 :tada:

2 个赞