使用电子邮件地址作为用户 ID 的优缺点是什么?

我正在创建一个网络应用程序,需要注册/认证,我正在考虑使用电子邮件地址作为唯一的用户 ID。下面是我看到的优缺点(最新的回复) :

优点

  1. 在注册期间少了一个需要填写的字段(只需要填写电子邮件地址、密码和验证密码)。我是个极简注册的狂热粉丝。

  2. 电子邮件地址更容易记住。(感谢 米奇杰里米)

  3. 你不必担心你最喜欢的用户名已经被盗用了——你是唯一一个使用你的电子邮件地址的人。(谢谢 TStamper)

缺点

  1. 用户每次登录时都要输入更多信息。

  2. 如果用户需要多个帐户,该怎么办?他们需要另一个邮箱地址。(我是否希望用户能够创建多个帐户?)

  3. 很容易让潜在的攻击者猜到(如果他们知道目标的电子邮件地址,他们就知道登录 ID)。(谢谢 瓦西里)

  4. 用户可能被诱惑使用相同的密码,他们使用的电子邮件帐户,这是不安全的。(谢谢 托马斯)

  5. 如果您经常更改电子邮件地址,那么可能很难记住在中断很长时间后您使用的网站注册地址。(谢谢 软件猴子)

  6. 黑客可以将注册表格发送垃圾邮件,并使用“已经收到的电子邮件”回复来生成一个有效电子邮件列表。(谢谢 大卫)

  7. 不是每个人都有电子邮件地址

如果我使用电子邮件作为 id,我将提供一种机制,允许在用户更改地址时对其进行更改。在这种情况下,用户不会将内容发布到公共网站,因此不需要一个单独的用户名来保护电子邮件地址(但这是其他网站需要考虑的事情)。

另一个选择是实现 OpenID (这是一个完全不同的争论)。

这似乎对谷歌有效,但他们的服务是紧密集成的。我在分析中遗漏了什么?你有什么建议吗?有人有经验可以分享吗?

最终剪辑

谢谢你们的回答。我已经决定使用电子邮件作为 ID,但是允许在注册后创建用户名用于登录目的。这允许一点灵活性,同时保持注册尽可能短。它还可以防止用户更改电子邮件地址时出现问题(他们只需用自己的用户名登录并更新)。我也将实施方法,以防止暴力强制电子邮件地址的注册和登录系统(主要是一个冷却期后,重复尝试)。

16642 次浏览

我想你漏掉了一个优点:

用户很可能会记住自己的电子邮件地址,而且由于电子邮件地址是独一无二的,他们永远不必担心自己首选的用户名已经被盗用。

作为一个网站用户,我可以告诉你,我讨厌记住不必要的用户名。我没有使用一个独特的句柄或任何东西,所以我永远不会记得我使用的名字的哪个变体没有被采用。我宁愿输入我的电子邮件地址。

还有,我喜欢 OpenID。

就个人而言,我更喜欢使用我的电子邮件地址作为用户名。这样就少了一件需要记住的事情,而且我也不用担心我喜欢的名字已经被别人取走了。

只有我的两分钱!

缺点

  1. 当电子邮件帐户使用相同的密码时,损害一个密码自动意味着损害另一个密码。

一个缺点可能是,如果它是一个电子邮件地址的登录可以被人猜测和暴力攻击企图。这其实不是什么大问题,因为现在大多数网站的登录信息都是公开显示的。

最大的优点是这样更容易记住登录。

赞成

人们讨厌必须创建一个唯一的名称,以适应他们的 ID,而且还没有采取注册一个网站。.这就是为什么用户 id 作为 电邮地址如此受欢迎的原因。

我真的很想在我名字的末尾回忆起1930年

反对: 如果一个黑客可以尝试大规模注册随机的电子邮件地址,他或她将能够找出这些地址中的哪些是有效的基于哪些注册失败。这是一种可以用来整合已知有效电子邮件地址列表的策略,这些地址是垃圾邮件黑市上的热门商品。

虽然现在我认为,这是一个问题,影响任何网站,要求一个电子邮件地址作为注册过程的一部分,无论是否有一个单独的用户名。但还是要考虑一下。

反对: 如果我改变我的电子邮件地址,突然我所有的帐户名都是无效的。我的名字不变,但我的电子邮件经常变。几年后我偶尔会重访一个网站,然后就卡住了... ... 两年前我的电子邮箱地址是什么? ? ?

我倾向于不喜欢赞成或反对的列表,而是试图想想利益和挑战。

挑战:

一些用户会试图使用他们的 ISP 的电子邮件地址。单独链接到一个电子邮件,可能是困难的用户谁忘记更新他们的电子邮件在所有的网站,他们已经注册之前,他们改变互联网服务提供商。

相反:

您应该考虑允许用户提供多个地址,以及用户选择的 ID,然后让用户决定他们希望做什么。也许还可以考虑允许用户提供 OpenID 帐户。

一个好的设置是需要用户名和电子邮件。允许用户用电子邮件地址或用户名登录是非常友好的用户。一个额外的好处是用户可以改变他们的电子邮件地址。它还将允许一个电子邮件有多个帐户。

坚持使用他们在任何地方都使用的电子邮件地址,实际上大多数主流网站都在使用它们,它们是独一无二的,因此它们可以帮助用户避免找到一个不被其他人使用的名字,而且用户不会忘记他们的电子邮件地址(至少在大多数情况下是这样的:) ,这不像用户名,如果他们不经常访问你的网站,他们会一直忘记。

你不应该担心他们太长,因为所有的主要浏览器(IE,FF。.等)提供自动完成的形式,这是默认启用,所以你键入的第一个字母在您的电子邮件,你得到一个下拉列表(即。自动完成列表) ,你只需点击进入整个电子邮件,我个人几乎从来没有输入完整的电子邮件地址,我总是键入第一个字母,然后从自动完成下拉列表中选择电子邮件。此外,如果你允许用户被记住(使用“记住我”复选框和持久 cookie) ,这将是另一个不用担心的理由。

我不知道你的应用程序,但通常用户有多个帐户是不可取的在大多数应用程序。

反对: 不是每个人都有电子邮件地址。考虑内部应用程序是否曾经访问过您的数据库。如果你经营一家商店,人们 威尔打电话来,通过电话下订单,并拒绝提供电子邮件地址。因此,尽管使用电子邮件地址作为默认用户 ID 很酷,但是一定要允许其他用户进入系统。(当然,这取决于具体情况。)

我可是吃了不少苦头才知道的。

您可能需要考虑的一个设置是: 同时拥有用户名和电子邮件。电子邮件用于登录,并且始终保持私密,用户名用于在任何公共交互中识别用户,如发布评论。由于用户登录凭据的两半都是私有的,因此它会稍微安全一些,而如果同时使用用户名进行登录和公共标识,那么登录的一半就已经知道了。

对于大多数情况下使用最小注册,我完全同意您的观点,但是根据您正在做的事情,您可能需要在这与为您的用户增加的安全性之间取得平衡。四个字段对注册来说并不过分(用户名、电子邮件、密码、确认密码) ,如果你特别喜欢冒险,你可以通过删除确认密码字段把它减少到三个,或者通过电子邮件给他们发送一个他们可以稍后更改的密码来减少到两个。

为了解决您的欺骗项目的电子邮件太长,以键入每一次。我已经实现了 StringScan Ruby 库。

require 'strscan'
def signup!(user, &block)
self.email = user[:email] unless user[:email].blank?
str = StringScanner.new(self.email)
str.scan_until(/@/)
str.pre_match
self.login = str.pre_match

等等。

然后只需更改登录方法,以允许电子邮件或登录匹配密码。

这个工作原理就像谷歌或者 mobime。用户可以选择只输入他们的电子邮件用户名(即。用户名而不是用户名@gmail.com)

如果你不在乎强迫你的用户使用 Facebook 或其他社交网络登录你的应用程序(大多数人似乎不在乎) ,那么你可以在引用其他表格/文档(MySQL,Mongo 等)时使用他们的社交网络电子邮件作为他们的“用户 ID”。

我注意到,使用社交媒体登录的好处是,所有的安全问题都由上述社交网络负责,包括不允许两个用户在他们的数据库中使用相同的电子邮件或用户名,从而省去了你为所有这些问题编写代码的麻烦。这只是我个人的喜好。

我现在正在努力移除这个。这是一个新的 反对从当前的时代。

电子邮件地址被许多政府认为是个人可识别信息(PII)。因此,无论何时在页面上显示它,甚至从端点返回它,都需要格外小心。

考虑到许多站点允许不同用户之间的交互。这通常意味着网站会提供一个用户列表(例如下拉列表,或者搜索结果)供用户选择。这实际上可以使 PII 泄漏的网站。

另一方面,用户名可以完全匿名。考虑到现在密码管理器的流行,用户实际上并不需要记住他们的用户名和密码。