流程是这样工作的。
- 如果登录失败5次,他们需要重置密码,并被发送到密码重置页面
- 用户输入电子邮件地址
- 链接将发送到提供的电子邮件地址。记录令牌、电子邮件和时间
- 回到站点,如果令牌有效,则检查数据库以确定电子邮件地址是否为实际成员
- 如果他们是会员,那么密码重置将继续,否则他们将陷入死胡同
但在收到这封信后,我想知道在发送电子邮件之前,我是否应该检查电子邮件地址是否与实际的会员帐户关联。
所以这就是我的问题,我应该在他们返回网站之前和之后都进行验证,还是在他们返回后就足够了?含义?
- 用户多次提交错误的登录数据
不要做假设
如果password
是错误的或实际上是username
,则不应进行假设-也不应将确切的错误通知用户(出于安全原因。不要。)。
让用户弄清楚:
用户名或密码不正确
需要帮助吗
我忘记了我的用户名 我忘记了密码
- 如果单击上面的其中一个(弹出如下:)
您的电子邮件:
_________________
给我发一个[密码/用户名]重置链接
-
如果提交的电子邮件确实存在,请检查数据库
(甚至不要考虑向不在您注册表中的电子邮件发送重置链接!) - 是否存在电子邮件?在数据库中为该帐户创建重置记录,并将重置链接发送到用户的电子邮件中
- 电子邮件不存在?谁在乎!出于安全原因,您应该显示相同的成功消息!(你不希望恶意用户玩猜谜游戏?由你决定。)
您应该很快就会收到一封带有重置
[theEnteredEmail]
链接的电子邮件
没有收到任何重置电子邮件重新发送
(可选)此时不要锁定帐户。保持其可访问性。如果您有一个活动重置记录,如果用户使用"旧"数据成功访问其配置文件,您可能需要将其删除。用户可能已经累了,或者只是有点老了,他可能还记得自己的账户数据,可能不想重置任何东西,可能想忽略重置链接电子邮件。
密码尝试失败
只有当您注意到大量连续失败的尝试时,宽限期才会锁定/保护帐户。创建该特定案例的数据库日志
如果数据库中存在username
,但密码不正确→向相应的用户配置文件电子邮件发送离散通知,其中包含您从日志收集的所有数据
嗨,
[user]
,我们注册的[day/time]
[n]
登录您的帐户失败:[logFile]
(n严重性=高)我们保护/锁定了您的帐户。请点击此链接解锁您的个人资料[unlockProfileLink]
(n严重性=低)为了使您的帐户更安全,请使用强密码(在这里您可以建议使用休息密码链接)
用户确实老了
打开他的电子邮件并跟随重置链接:
- 检查引用重置链接是否对该帐户仍然有效
- 有效吗?创建临时会话
(您应该能够从与该帐户的"已打开"到期重置记录令牌相关联的引用URL链接中识别用户帐户)
嗨
[user]
您的新[用户名/密码]:_____________
重复[用户名/密码]: nbsp_____________
更新[用户名/密码]
- 提交时,检查临时会话或令牌是否未过期和两个字段是否匹配
-
如果推荐人匹配与帐户关联的临时重置记录(令牌)-更改密码/或/用户名。
-
成功用户仍然必须从登录页面正确登录
您的
[username/password]
现在已更新。您将很快收到一封确认电子邮件。
登录 :
用户名:_________
密码:;_________
登录
- 成功验证登录会话
- 失败?从上面重复:)
编辑:如果您不作为电子邮件帐户提供商:
在发送电子邮件之前,您应该明确检查电子邮件地址是否有效。您发送的令牌也应该始终与实际帐户相关联。否则,您可以更改任何帐户的密码。所以我的建议是:
- 用户输入电子邮件地址
- 后端检查该电子邮件地址是否存在(用户在创建其帐户时已告知您)。如果是,则生成一个令牌并将该令牌与帐户关联。如果不是,那就是死胡同
- 将令牌发送到电子邮件地址。用户可以点击它,验证他是该电子邮件地址(以及该帐户)的所有者,并能够更改密码
如果你是一个电子邮件帐户提供商,你可以在他注册帐户时将令牌发送到用户告诉你的第二个电子邮件地址。更好的解决方案是通过短信或邮件向他发送代币。