偶尔(尽管很少),我们的一些用户说他们的密码不起作用:他们说他们输入了正确的密码,但收到了“密码错误”的消息。
我们告诉他们使用重置密码功能,他们确实这样做了,但他们仍然觉得身份验证系统有时不起作用。
我们的猜测是他们的密码不是他们记得的,但是由于我们不以纯文本形式存储它,我们有什么方法可以证明是这样吗?
在某些情况下,我们能够向他们展示他们在某个日期更改了密码然后忘记了密码,他们很满意。但情况并非总是如此。
偶尔(尽管很少),我们的一些用户说他们的密码不起作用:他们说他们输入了正确的密码,但收到了“密码错误”的消息。
我们告诉他们使用重置密码功能,他们确实这样做了,但他们仍然觉得身份验证系统有时不起作用。
我们的猜测是他们的密码不是他们记得的,但是由于我们不以纯文本形式存储它,我们有什么方法可以证明是这样吗?
在某些情况下,我们能够向他们展示他们在某个日期更改了密码然后忘记了密码,他们很满意。但情况并非总是如此。
没有一种真正快速的方法来证明这一点,因为哈希被设计为不可逆的。
您可以使用他们声称的密码,并按照@TechTreeDev的建议手动生成哈希。您应该使用加盐哈希(即 BCrypt),因此请确保使用相同的盐。
如果手动生成的哈希匹配,那么您已经证明登录代码中存在问题。
更可能生成的哈希值会有所不同,那么您已经排除了登录代码问题,但仍然可能存在密码设置问题或手动生成错误。
这几乎是您可以检查一个人的密码的程度。除此之外,我们还进行系统测试。
如果您怀疑间歇性/随机机会边缘情况,您可以创建一个猴子测试脚本来设置密码,然后尝试它们。不过,这种方法可能有点矫枉过正。
最好的办法是查看您的登录代码和所有重置密码的点。代码应尽可能简短。根据我的经验,排除边缘情况问题的最佳方法是进行代码审查,因为手动测试通常不会涵盖这种边缘情况。
需要特别注意的几点:
确保maxlength
任何密码的设置都是一致的(或者更好的是,不存在)<input>
。您正在寻找密码设置和登录表单之间的一致性。
确保没有服务器端截断。
确保编码是一致的。如果密码中使用了非 ASCII 字符,则密码设置表单和登录表单的行为必须完全相同。
也不要自动从密码中去除空格或非ASCII字符。如果您的代码简洁,那么您可以通过代码审查轻松掌握这种情况。
最后是一些人性化的提示:
首先验证他们使用的是正确的用户名。
检查大写锁定设置是否正确。
向客户支持人员提供登录或密码重置的每个日期/时间的日志。如果自上次重置以来至少有一次登录,则他们知道系统工作正常。
只要登录代码没有改变,并且自上次成功以来哈希没有改变,那么您可以合理地确定问题一定是输入错误的密码。
查看Wrong Password 错误的 UX,为用户提供一些简单的提示和可能性的权威解释。这可能会减少致电客户服务的次数。
在重置密码时通过电子邮件通知客户以提醒他们可能会有所帮助。(或其他家庭成员,如果是共享帐户)
有一种方法可以确定,那就是计算用户输入的哈希值,使用相同的盐,并将其与你所拥有的进行比较。但是,这就是登录过程已经做的事情,而用户并不相信。当你为他们做的时候,他们为什么要相信它?
相反,你可以做我最近经常看到的事情,例如在 Windows 10 中,但也可以在网站上:
为用户提供一种方法来验证他们输入的内容。
当然,在登录时,字符应该用点或其他字符表示,这样窥探者就无法从用户的肩膀上看到密码。
但只要它在输入字段中,它还没有被加密或以任何方式散列。因此,提供一个将这些点变成实际字符的按钮。
这样,在输入错误的密码后,他们可以再次输入密码,并查看他们刚刚输入的内容。或者他们可以在登录前检查。
忘记大写锁定、挂起的班次、错别字;用户可以通过这种方式检测到它们。
为了改善您的用户体验,您首先需要添加一些 UI 来告诉用户以下情况:
此外,当密码插入错误时,显示以下消息:
密码或用户名/邮箱错误,请输入注意小写或大写字母和所有符号数字,必须完全匹配。避免进行复制粘贴,因为有时复制文本可能会添加额外的不需要的空格和/或换行符。
请记住,您的用户可能是对的!我曾经有一部旧手机不允许我登录网页,我不知道这是否是文本编码问题,但我的密码是字母数字并且在 PC 上完美运行。
接受的答案确实涵盖了大部分内容。但是假设我在那里尝试了所有建议但仍然找不到问题,然后我会尝试在错误发生时捕获错误。为此,如果用户连续两次登录失败,您可以添加记录接收到的明文密码的代码(以便过滤掉所有刚刚犯愚蠢错误并在第二次尝试时更正错误的用户)。
为了不削弱系统的安全性,您只能在手机上确实有用户无法登录的情况下启用密码登录,并在征得他/她同意的情况下只记录他/她的密码。
记录您的应用程序看到的实际密码的好处是您可以准确地看到您的应用程序看到的内容。在绝望的用户打了几次电话后,您可能会开始在他们的密码中发现一种模式(例如尾随空格、特殊字符等),这表明您的登录代码存在问题,或者您可能会看到他们打算输入“mysweetheart”但是输入了“myseatheart”,这意味着登录问题很可能是所有用户错误。