在尝试重置密码时,我应该向输入无效用户名的用户显示什么消息?

What message should I display to a user who inputs an invalid username when trying to reset their password?

我正在我的网站上构建一个新的被遗忘的功能,用户可以在其中输入他们的用户名或电子邮件,然后会收到一个 link 来重置他们的密码。

如果他们输入的电子邮件未注册到我系统中的帐户,我不会在浏览器中告诉他们。浏览器消息将与成功重置 ("A message with further instructions has been sent to that email address") 相同,并且他们发送的电子邮件将显示类似 "this email is not registered on any account" 且未重置 link.

如果他们输入的用户名未在我的系统中注册,我该怎么办?好像我有两个选择:

  1. 在浏览器中显示错误("this username is not recognized")
  2. 在浏览器中显示成功消息

#2 的问题是他们会收到一封永远不会收到的电子邮件,因为我没有与用户名匹配的电子邮件(因为用户名不存在)。这似乎是不受欢迎的行为,但我也担心 #1 出于数据保护的原因是不好的。

所以#2应该被排除,因为它实际上是不正确的信息。

#1确实是选项。例如,转到 gmail 或 Microsoft 的 outlook 登录,并输入一些不可能的帐户名,两者都会告诉您它无法识别该电子邮件。另外,你要用#1 提供什么信息?如果存在具有该用户名的帐户。您可以通过尝试使用目标用户名创建帐户轻松获取此信息。

我认为您可以接受第 1 种方法。

我建议像您一样显示消息:

A password reset link was sent to the email adress "somebody@example.com".

此外,如果用户没有收到电子邮件,我会提供帮助:

If you do not get the email in a few minutes, please check whether it got into the spam folder and make sure it was the email address you are registered with. For further help you can contact our support.

使用此消息,您不仅可以隐藏电子邮件是否已注册(这对某些网站可能很重要),甚至:

  1. 用户可以看到他尝试过的电子邮件地址,因此他可以检查这是否正确并尝试另一个。
  2. 如果用户不记得正确的电子邮件地址,无论如何他都需要支持,所以就在那里提供 link。
  3. 消息措辞积极,我们并不暗示用户犯了错误或想滥用系统。

编辑: 我忽略了您正在使用用户名而不是电子邮件。如果可以自由选择 用户必须输入用户名而不是电子邮件,我认为没有理由将其存在保密。不过,用户名比电子邮件地址更难记。

如果您使用电子邮件地址(这是敏感数据)重置密码,我建议您这样说

If the email address you have entered is in our database, we will send a password recovery link to it.

但是,您正在使用用户名来重置密码,而用户名不是敏感数据,因此选项 1 应该没问题。

不过,唯一的问题是您可能不应该使用用户名重置密码,因为垃圾邮件发送者可以利用这一点。假设您网站上的用户名是 public,垃圾邮件发送者可以向在您网站上拥有帐户的每个人发送密码恢复电子邮件。因此,我建议您提供用于注册帐户的电子邮件地址以恢复密码。