允许用户更改密码的模式。

Pattern for allowing a user to change his password. Should the user have to repeat the new password as well as enter the old password?

关于恢复SO上的密码有很多问题,但考虑到以下两个问题之一,不考虑更改密码:

1)用户已在系统中通过身份验证(通过user/pw或通过第三方身份验证,如facebook/twitter)
2)用户知道自己的旧密码。

考虑到这些起点,我有两个截然不同的问题,即允许用户以最少的步骤更改密码的最佳实践是什么。

Scenario (user has already authenticated and logged into system):
Enter Old Password:_______ (1: can I get rid of this)
Enter New Password:_______
Enter New Again: _______ (2: can I get rid of this)

1)不让用户输入旧密码可以吗?在这种情况下,我假设用户已经通过了系统的身份验证。让用户重新输入密码似乎是多余的。我知道这对于高安全性应用程序(如银行)来说很重要,因为用户在无人看管会话的情况下可以允许用户输入新密码,而不知道密码会使他们进入这种情况。

在我介绍的示例中,应用程序的安全性不是很高,风险也很低。另外,由于我们允许第三方认证(facebook/twitter),那么理论上,如果机器上有其他人,并且用户有一个facebook/twitter的实时cookie,他们就可以进入帐户。

2)是否可以不让用户输入两次新密码。这样做有点像90年代的人。现在人们已经习惯了输入密码,5%的人输入密码的可能性与他们预期的不同,似乎不会超过花在两次输入密码上的时间。在这5%的情况下,最糟糕的情况是他们只需重置密码(或者只需登录facebook/twitter并重置密码)。我发现现在这样做的一个网站是Quora(尽管他们仍然执行步骤1)。我没有看到其他人也这样做。


首先,我提醒你永远不要,永远,永远,永远,永远,永远不要假设用户是他所说的人,尤其是在更改允许他们访问他们帐户的密钥时。这是一个非常好使用的方法,总是需要密码验证来编辑密码。

至于输入两次密码,这主要是在后端完成的,您可以比较两个密码,并确保它们是相同的。这样做是为了确保用户在输入密码时有意输入密码。连续两次输入同一个密码的几率不大,因此,如果两个密码相同,您可以很好地假设它们没有输入错误。

就我个人而言,我宁愿花10秒钟的时间重新输入一个密码,而不必经历这样的麻烦:我输入了密码,然后必须重置密码,访问电子邮件,重新访问网站,然后重新输入密码。在一天结束的时候,你仍然需要输入两次,第一种方法只是更加简化了。

我决不允许用户编辑身份验证方法,除非他们首先验证使用身份验证方法的能力。有些用户在离开座位时会将其计算机保持登录状态,这使得其他用户可以坐下来访问私人数据,如果他们可以在不输入当前密码的情况下更改密码,这将使帐户更容易被滥用。


大约1)。我不相信一个不要求我的旧密码的应用程序,当我试图更改它时,我会时不时地预取输入我的旧密码的麻烦,而不是有人在我不注意的情况下更改它的风险,无论它是我的银行帐户还是我的杂货店列表。

2)我已经保存了几次我的屁股需要双重输入你的密码,很容易输入一个小的密码变种,可能非常危险,锁定你的帐户。

你应该考虑到,用户不会经常更改他们的密码,所以麻烦是值得的,我会保留旧的公式,要求你输入最后一个密码,并要求你输入新密码两次。


据我所知,输入旧密码的必要性是防止在用户意外地离开自己的登录和帐户的情况下劫持帐户。是的,在这种情况下,劫机者(通常是某人的朋友,他们注意到自己在Facebook上登录了)会做一些诸如发布愚蠢或攻击性的事情,但至少,没有原始密码,他们无法有效地锁定原始用户。

在第二种情况下,我不认为要求用户再次输入密码太不合适;对于好的密码,它们应该比较复杂,因此有点难输入。要求第二次进入是有点麻烦,但不是太不合理(IMO)。


让他们输入旧密码的一个很好的原因是,合法用户起身去了浴室,一个恶作剧者决定更改EIR密码。

我个人不介意输入两次新密码。也许有些人会。

你当然可以选择两个步骤中的一个或两个都不做,这可能不会给你带来太多的头痛。但那可能。

IMO消除这个用户名/密码垃圾的一个更好的方法是这样做,并使用OpenID或其他替代身份验证方法,如X509证书。