49

我知道 gmail 允许用户在@符号之前的电子邮件地址中插入任意数量的句点。Gmail 还允许用户像这样附加电子邮件地址:userName+anyStringHere@gmail.com。所有这些“不同”的电子邮件地址本质上是相同的地址。(链接到描述这些“功能”的谷歌博客)

我想防止用户使用本质上相同的电子邮件地址创建多个帐户。我决定将电子邮件地址存储在我的数据库中,其中包含这些句点以及后面的任何内容(包括 + sing),但现在我想知道:忽略电子邮件提供商主要关注的 @ 符号前面的句点是否是标准?

4

3 回答 3

33

这确实是 gmail 特有的,但这也适用于域的 google 应用程序,因此您只能为 @gmail.com 执行此操作

我不会这样做,这只会疏远您的诚实用户,并且不会阻止任何人决心创建多个帐户。

于 2013-02-14T00:41:34.820 回答
30

在过去的几天里,我遇到了同样的问题。在网上研究并检查了一些东西后,我发现:

  • 关键点:Microsoft Outlook、Yahoo Mail、Apple iCloud ID
  • 点不重要:Gmail、Facebook ID
  • 严禁点:推特

来源:一篇关于 Slate 的文章

我得出的结论是,大多数用户使用微软、谷歌或雅虎提供的服务。所以我可以有一个像这样的特定于应用程序的正则表达式。

var eml_exp = /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@(gmail.com)$/i;
if(eml_exp.test("email@addrss"))
//if it's a gmail address, then remove periods from local part and also anything
// after `+` sign . Then compare the address in your existing user table,
// if you find it unique or unused then let the user to register.

您也可以阅读其他已知服务的手册并根据它们进行实施。

“不要忘记开源你的工作:p”

更新

根据这个 SO questionAdding + text before the @ in an email,您可能会阻止使用+符号您的整个问题,我的问题将得到解决。

于 2016-03-21T07:42:11.407 回答
2

“我想阻止用户创建多个帐户”

也许,就像这里的其他人说的那样,不是忽略句号的好理由。

然而,一个很好的理由是防止用户意外创建不同的帐户。假设最近安装了一个网络应用程序,但尚未配置为与 Gmail OpenAuth 一起使用。因此,人们手动输入地址,以使用本地电子邮件 + 密码帐户进行注册。

稍后,Web 应用程序会配置 OpenAuth 和使用 Gmail 登录按钮。现在有 gmail 地址的人,单击该按钮进行登录。而且......在某些情况下,人们在手动输入时不小心手动输入了没有、点或不同点的地址(嗯,键盘)之前。

现在,应用程序认为地址不同,并自动为用户创建一个新帐户。她/他然后想知道:“我所有的旧东西在哪里?我以前用这个帐户创建的?我用相同的电子邮件地址登录!”

发生这种情况的真实示例:https ://meta.discourse.org/t/discourse-creates-new-users-if-dots-are-present-absent-in-google-email-address-when-logging-in -使用-谷歌/66151

我认为对于非技术人员来说,忽略 Gmail 地址中的点是用户友好的方法。

要让技术人员使用相同的 Gmail 地址创建多个帐户(出于测试目的),您可以选择考虑whatever+with-tags@gmail使用不同的地址。— 每个人都很高兴 :-) (Astroturfing 和垃圾邮件过滤器可以考虑到这一点bob@gmail.com并且bob+with-a-tag@gmail.com是同一个人。)

于 2018-07-15T02:05:07.867 回答