Discourse 认证验证

|||
-|-|-|
:discourse2: | 概要 | Discourse Authentication Validations 启用了向用户字段添加自定义验证以切换用户字段在注册模态框中显示的能力。
:hammer_and_wrench: | 存储库链接 | https://github.com/discourse/discourse-authentication-validations
:open_book: | 安装指南 | 如何在 Discourse 中安装插件

:information_source: 关于

Discourse Authentication Validations 增加了向用户字段添加自定义验证的能力。

自定义用户字段没有核心提供的任何类型的 validation,除了检测必填字段的空值。此插件增加了定义每个用户字段的正则表达式的能力,然后该正则表达式将针对提供的输入值进行检查。

此外,此插件还增加了在注册模态框中切换用户字段显示的能力。这允许您将用户字段 “链接” 在一起,以便仅当先前的用户字段具有特定值时才显示用户字段。

:building_construction: 基本设置

1. 启用插件

可以在切换按钮或其设置中启用 Discourse Authentication Validations 插件,两者都可以在您的 admin/plugins 页面访问。

2. 向用户字段添加自定义验证

启用 Discourse Authentication Validations 插件后,您将在用户字段表单的底部看到一个 包含自定义验证 复选框。

选中后,它将显示另外三个字段:

  1. 值验证正则表达式
  2. 显示值
  3. 目标用户字段

:closed_lock_with_key: 添加自定义验证

值验证正则表达式 字段中包含一个有效的正则表达式:

注册表单上的用户字段值现在将根据您包含的正则表达式进行测试。如果输入不符合自定义正则表达式的标准,注册表单将不会提交。

无值(依赖默认表单验证)

错误值

正确值

:link: 链接用户字段

首先,在用户字段中包含一个 显示值

当用户字段包含 显示值 时,它将监视附加输入的值,直到输入值匹配 任何 显示值。然后,它将切换任何包含的 目标用户字段 的可见性,使它们可见。

其次,添加一个 目标用户字段 值。

目标用户字段 下拉列表中,您将看到所有可用用户字段的列表。您选择的任何用户字段的可见性都将通过 显示值 中的相应值进行切换。

:hammer_and_wrench: 高级链接

您可以通过向多个用户字段添加自定义验证来链接用户字段。

例如,假设我们有三个用户字段,其值为:

名称 包含自定义验证 显示值 目标用户字段
输入一 true show-field-two 输入二
输入二 true show-field-three 输入三
输入三 false

输入二和输入三默认将隐藏,因为它们是输入一的“子项”。当 show valueshow-field-two 添加到输入一时,输入二将显示,但输入三仍将保持隐藏。它将保持隐藏,直到输入二的值为 show-field-three

通过正确组合显示值和目标类,您可以无限地将用户字段 嵌套 在彼此下方。

18 个赞

你好 @isaac

我喜欢这个插件,它正是我需要的!它还在维护吗?我在“链式”功能上遇到了麻烦。

我按照上面的示例,使用了:

但它默认显示了所有字段……如果我错过了文档中的内容,我很抱歉!

1 个赞

抱歉,插件是有效的。但是,如果您通过“邀请”注册链接查看,它将无效。如果您使用的是公共注册页面,它有效的。

将此逻辑同时用于邀请和公共注册将是一个很棒的功能!

插件做得很好!

5 个赞

我非常同意。@tobiaseigen 如果我们要将此插件作为一项更广泛的功能来采用,正如 @kravitsjacob 所指出的,我们将希望逻辑同时适用于这两个地方(公开/邀请)。

2 个赞

你好 @isaac。再次感谢你提供的这个超棒的插件——它确实为我打开了许多讨论机会。

我遇到一个小 bug——我注意到即使问题被隐藏了,问题回复也会被保存。这导致了一些用户提交了本不应出现回复的意外情况(这就是我们最初想要隐藏问题的原因)。这种行为还导致了另一个情况,即当一个问题被双重嵌套时,即使父回复已被取消选择(因为它仍然认为触发答案已被选中),它仍然会出现。我知道这个描述有点含糊,所以这里有一个 gif 来突出这种行为:

auth null bug

我认为我期望的修复方法是在回复不再可见时将其重置为 null 值。这也可以是表单设置者可配置的“选择加入”行为——我可以看到关于在遍历这些树时回复是否应该持续存在的不同理念。

你是否能够实现这个功能? :pray:

5 个赞

感谢您提供的详细回复!我下周会看看这个 :slight_smile:

3 个赞

今天有机会查看了这些问题 :slight_smile:

请阅读 PR 描述以了解详情!

3 个赞

目前无法实现可选的必填字段。

我有一个“行业”字段,每当选择“其他”时,它会显示“其他行业”字段。

但是,当我将“其他行业”字段设置为必填时,当该字段隐藏时,我无法提交表单。

当我手动取消隐藏 div 时,您可以看到它正在要求输入此字段,即使表单已隐藏。

当我选择“其他”并填写值,然后选择另一个行业使输入再次隐藏时,我可以提交表单。然后,正如 @kravitsjacob 指出的那样,情况也相同:“其他行业”字段的值会保存到用户的个人资料中,即使“行业”未设置为“其他”。

用户管理员:

3 个赞

您好 @RGJ ,您是否设法解决了必填字段的问题?我遇到了同样的问题。
@isaac 有什么变通的方法吗?我有一些字段需要在满足可见条件时设为必填。

不,我还没有收到关于此事的回复,我自己也没有花时间处理。

@RGJ,感谢您的快速回复。
我刚刚为原始仓库创建了一个 PR,其中包含一个应该可以解决问题的修复。
这里的主要挑战是验证在两个地方运行,即前端和后端,所以我必须分别为每个地方实现解决方案,并确保它们按预期工作。
希望这对将来的人有所帮助。