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

我正在创build一个需要注册/身份validation的Web应用程序,我正在考虑使用电子邮件地址作为唯一的用户ID。 以下是我所看到的优点和缺点(更新回复):

PROS

  1. 在注册期间只需填写一个字段(它只是电子邮件地址,密码和validation密码)。 我是简约注册的忠实粉丝。

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

  3. 您不必担心自己喜欢的用户名已被占用 – 您是唯一使用您的电子邮件地址的人。 (感谢TStamper )

缺点

  1. 用户每次login时都要input更多内容。

  2. 如果用户需要多个帐户呢? 他们需要另一个电子邮件地址。 (我甚至希望用户能够创build多个帐户?)

  3. 易于潜在的攻击者猜测(如果他们知道目标的电子邮件地址,他们知道loginID)。 (感谢Vasil )

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

  5. 如果您经常更改电子邮件地址,则可能很难记住您经过长时间的间隔后用于注册网站的地址。 (感谢软件猴子 )

  6. 黑客可能会将registry格发送垃圾邮件,并使用“已发送电子邮件”的回复来生成有效的电子邮件列表。 (感谢David )

  7. 不是每个人都有电子邮件地址。 ( 谢谢尼古拉斯 )

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

另一个select是实施OpenID(这是另外一个辩论)。

这似乎适用于Google,但他们的服务是紧密集成的。 我在分析中错过了什么? 你有什么build议? 有没有人有经验分享?

最终编辑

谢谢大家的回应。 我已决定使用电子邮件作为ID,但是允许在注册后创build一个用于login的用户名。 这允许一点点的灵活性,同时保持登记尽可能短。 它还可以防止用户更改电子邮件地址时的问题(他们只需使用用户名login并更新即可)。 我也将实施一些方法来防止电子邮件地址被注册和login系统(主要是多次尝试后的冷静期)暴力破解。

我倾向于不喜欢赞成/反对名单,而是尝试考虑利益和挑战。

挑战:

有些用户会试图使用他们的ISP的电子邮件地址。 链接到单独的电子邮件,对于在他们更改ISP之前忘记更新其所有已注册的网站中的电子邮件的用户可能是困难的。

代替:

你应该考虑允许用户提供多个地址,以及用户select的ID,然后让用户决定他们想要做什么。 也许还应考虑允许用户提供一个OpenID帐户。

就个人而言,我更喜欢用我的电子邮件地址作为用户名。 这是一件要记住的事情,我永远不必担心我的名字已经被采取。

只是我的2美分!

我想你错过了一个PRO:

用户可能会记住他们的电子邮件地址; 而且由于电子邮件地址是唯一的,所以他们永远不用担心他们的用户名已被占用。

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

另外,我喜欢OpenID。

CON:不是每个人都有一个电子邮件地址。 考虑一下你的数据库是否被内部应用程序访问过。 如果您正在经营一家商店,人们通过电话致电并下订单,并拒绝提供电子邮件地址。 因此,虽然有一个电子邮件地址作为默认的用户ID很酷,一定要允许交替进入系统。 (当然,这取决于上下文。)

学会了这个难题。

缺点

  1. 当电子邮件帐户使用相同的密码时,自动妥协就意味着妥协另一方。

一个你可能要考虑的设置:同时拥有一个用户名和一个电子邮件。 该电子邮件用于login,并始终保持私密,用户名用于在任何公共交互中识别用户,如发表评论。 由于这两个用户login凭证都是保密的,因此它的安全性略高一些,而如果您使用用户名login和公共识别,则一半的login信息是已知的。

我绝对同意你对大多数情况下进行最less的注册,但是根据你在做什么,你可能想要平衡这一点,增加用户的安全性。 四个字段不会太注册,(用户名,电子邮件,密码,确认密码),如果你觉得特别冒险,可以通过删除确认密码字段,或通过电子邮件发送一个密码他们可以稍后改变。

PRO

人们讨厌必须创build一个独特的名称,适合他们的身份证,并没有被采取注册一个网站..所以这就是为什么用户名为EMAIL ADDRESS是如此的拥抱。

例如 :TStamper1930,他真的想记得1930年我名字的末尾,我真的想要

CON:如果黑客可以尝试大量注册随机电子邮件地址,他或她将能够根据哪些注册失败找出哪些地址是有效的。 这是一个策略,可以用来把已知有效的电子邮件地址列表,这是垃圾邮件黑市上的热门商品。

尽pipe现在我想到了这个问题,但是这个问题会影响任何要求将电子邮件地址作为注册过程的一部分的网站,而不pipe是否有单独的用户名。 但是这还是值得思考的。

CON:如果我更改了我的电子邮件地址,突然我的所有帐户名称都是无效的。 我的名字没有改变,但我的电子邮件经常。 我偶尔在几年后重访了一个网站,并被卡住了…两年前我的电子邮件地址是什么?

坚持使用电子邮件地址他们在任何地方使用,实际上大多数主要的网站使用它们,它们是独特的,所以他们从努力find一个不被他人使用的名字,也用户不会忘记他们的电子邮件地址(在大多数至less有:)),这是不同的用户名,他们将继续忘记,如果他们不经常访问您的网站。

你不应该担心它们太长,因为所有的主要浏览器(IE,FF等)都提供了默认启用的表单自动完成function,所以你在你的电子邮件中input第一个字母,然后你会得到一个下拉列表(即自动完成列表),您只需点击input整个电子邮件,我几乎从不input电子邮件地址全部,我总是键入第一个字母,然后从自动完成下拉列表中select电子邮件。 此外,如果您允许用户被记住(使用“记住我”checkbox和永久性Cookie),这将是另一个不用担心的原因。

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

一个骗局可能是,如果这是一个电子邮件地址login可以被人们猜到和暴力攻击企图。 这并不是一个大问题,因为在大多数网站上login都是公开显示的。

最大的赞成是login更容易记住这种方式。

一个好的设置是要求用户名和电子邮件。 允许用户使用电子邮件地址或用户名login是非常用户友好的。 另外一个好处是用户可以改变他们的电子邮件地址。 它也将允许多个帐户一个电子邮件。

为了解决您的电子邮件的条目太长,每次input。 我已经实现了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 

等等..

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

这工作就像谷歌或mobileme。 用户可以select只input他们的电子邮件用户名(即用户名,而不是username@gmail.com)。

如果您不介意强迫用户使用Facebook或其他社交networking(大多数人似乎不在意)login到您的应用程序,那么您可以在引用时使用他们的社交networking电子邮件作为他们的“用户名”其他表/文件(MySQL,Mongo等)。

我注意到使用社交媒体login的好处在于,所有的安全性都已经被所述社交networking所照顾,包括不允许2个用户在他们的数据库中具有相同的电子邮件或用户名,从而为您节省了编码的麻烦所有这一切。 这只是我个人的喜好。