studosi / mail-filter
控制哪些电子邮件可以在您的Flarum上注册
Requires
- flarum/core: ^0.1.0-beta.8
- dev-master
- 0.2.0
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- 0.1.1
- dev-dependabot/npm_and_yarn/js/json5-1.0.2
- dev-dependabot/npm_and_yarn/js/decode-uri-component-0.2.2
- dev-dependabot/npm_and_yarn/js/loader-utils-and-webpack-cli-1.4.2
- dev-dependabot/npm_and_yarn/js/terser-4.8.1
- dev-dependabot/npm_and_yarn/js/ajv-6.12.6
- dev-dependabot/npm_and_yarn/js/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/js/browserslist-4.16.6
- dev-dependabot/npm_and_yarn/js/lodash-4.17.21
- dev-dependabot/npm_and_yarn/js/ssri-6.0.2
- dev-dependabot/npm_and_yarn/js/y18n-4.0.1
- dev-dependabot/npm_and_yarn/js/elliptic-6.5.4
This package is auto-updated.
Last update: 2024-09-05 14:14:59 UTC
README
Flarum的邮件过滤器扩展 - 通过白名单、黑名单和正则表达式描述来过滤您网站的电子邮件注册
要求
此扩展是在Flarum 0.1.0-beta12和PHP7.4上构建和测试的。如果您遇到问题,并且使用的是不同的构建,请说明您没有使用与本文相同的设置(这样我就知道要在另一个环境中对其进行测试)。
除此之外,没有先决条件。它实际上是一个非常小的扩展。
安装
使用 Bazaar 或手动使用composer安装
composer require studosi/mail-filter
更新
composer update studosi/mail-filter
截图
链接
如何使用
在管理面板中,有4个设置类别
- 白名单
- 白名单正则表达式
- 黑名单
- 黑名单正则表达式
使用这些设置类别,您可以引入对谁可以注册网站的多种约束 - 在后续文本中,我们将这些约束称为 规则。
白名单和黑名单
此类别中的规则将明确检查它们是否相同(使用PHP中的==
运算符)。
正则表达式约束
此类别中的规则将使用preg_match
进行匹配。
此外,浏览器还将检查正则表达式本身是否有效。我对JavaScript和PHP的正则表达式引擎之间的兼容性不太了解,因此此有效性检查可能不会按预期工作:在这种情况下,请提交一个 问题。
基本上,这些检查检查整个字符串。这样您就可以潜在地阻止某些用户名,而不仅仅是域名。
此外,还有最后一件事,这需要 正则表达式 - 诸如在字符串前或后添加/
之类的特定语言的事情是不必要的(实际上,此扩展 默认执行此操作,而无需检查此类东西是否已存在)。
良好正则表达式实践的示例
我将简要说明创建电子邮件正则表达式约束时的良好实践。
域名限制
例如,如果您想过滤掉 gmail 电子邮件,您会引入一个类似以下的正则表达式
[^\@]*gmail\.com$
这里有一些需要注意的事情。
首先,您引入一个类似 [^\@]*
的粒子。这将确保您覆盖任何子域名。这种类型的表达式对 黑名单 很好(因为它很严格)。
其次,要注意结尾的 .
- 这对于初学者来说很重要,因为 .
实际上在大多数(如果不是所有)正则表达式引擎中是一个任何字符别名,并且如果没有终止符(我们称之为\
),它可以将诸如 gmailacom
、gmaillcom
等内容与 gmail
和 com
之间的不同字符匹配起来。
最后要注意的是字符串结尾操作符($
)。当匹配域名时,您应该使用它,因为它可以减少开销,并且由于域名是电子邮件的 最后 一部分,因此它是明确的。
如果您正在为白名单创建表达式,您应该使用覆盖较少域名的表达式,即
\@gmail\.com$
这也是非常严格的,因为它只会允许以@gmail.com
结尾的邮件通过,而不会允许你不知道如何处理的gmail.com
域名的任何子域名。
用户名限制
假设你想过滤掉以mark
开头的电子邮件。这样做相当简单
^mark[^\@]*
再次注意,我在这里使用的是[^\@]*
模式。另外,注意我用^
标记了条目的开始。没有它,正则表达式引擎会搜索整个字符串以查找匹配项,这不是你想要的。
但为了举例,假设你想过滤掉包含单词fuck
(不考虑位置)的电子邮件。那么,你只需要创建一个等于
fuck
或
[Ff][Uu][Cc][Kk]
的条目,这将使匹配不区分大小写(尽管电子邮件作为URI是不区分大小写的,尽管我不确定Flarum是否对其进行了规范化,所以需要检查)。
名称
名称不必是唯一
的——它们用于微分类,将来可能可以搜索。此外,它们默认是必需的,不是出于任何功能原因,而是为了你的方便。人们会忘记事情 :)
活动
每个规则都可以在不删除它们的情况下启用和禁用。这是通过使用规则定义左侧的开关来完成的。当服务器检查电子邮件是否有效时,将跳过这些规则的检查。
执行顺序
目前,扩展将执行以下操作
- 检查电子邮件是否在精确的黑名单上
- 如果是,则抛出
黑名单异常
- 如果是,则抛出
- 检查电子邮件是否在正则表达式黑名单上
- 如果是,则将
blacklisted
标志设置为true
- 如果是,则将
- 如果
blacklisted
标志设置为true
- 检查电子邮件是否在精确的白名单上
- 如果是,则允许注册
- 否则,抛出
黑名单异常
- 检查电子邮件是否在精确的白名单上
- 如果
blacklisted
标志设置为false
- 检查两个白名单是否为空
- 如果是,我们假设该站点不运行白名单,因此允许注册
- 检查我们是否可以在任一白名单中找到电子邮件
- 如果可以,则允许注册,否则抛出
白名单异常
- 如果可以,则允许注册,否则抛出
- 检查两个白名单是否为空
换句话说,优先级链用以下内容表示
黑名单 > 白名单 > 正则表达式黑名单 > 正则表达式白名单
当然,其他优先级链也是可能的(例如白名单 > 黑名单 > 正则表达式白名单 > 正则表达式黑名单
),这可能会在未来版本中作为一个设置。
目前,如果邮件通过检查,则调用validate()
函数将返回0
,即它使用C语言式的返回值。将来可能会添加错误代码,并且异常抛出可能会完全移动到extend.php
文件中。
路线图
- 在尝试删除规则时引入弹出对话框
- 使GUI看起来更好(减少纯HTML的平凡性)
- 引入列表导入(它已经在本地文件中,但我没有时间立即实现它)
- 为每个列表创建基于名称的搜索
- 清理后端代码(我三天前开始学习JS和PHP编程,给我一些宽容吧 xD)
关于
此插件最初由Yalfoosh编写。它是Studoši
社区的一部分——由学术公民运营的克罗地亚教育论坛。
如果你喜欢它,给它一个星号 :)
我们所有的Flarum开源项目都将使用Apache 2.0
许可证。
如果不是这种情况,或者您有任何其他问题或查询,请确保通过以下电子邮件地址联系我们:我们的电子邮箱,或者通过他的半商业电子邮件联系Yalfoosh。