稳健的电子邮件验证算法
本文关键字:验证算法 电子邮件 | 更新日期: 2023-09-27 18:16:10
我正在开发注册向导,目前面临着强大的电子邮件验证算法的问题。
-
当我们得到用户指定的信息,如
first name
,password
,email
,我们应该保存这些信息到数据库。让我们也说我们有合适的表为这些字符串。 -
接下来,我们生成一些电子邮件验证令牌(只是生成的代码,由一堆字符和数字组成),并将其保存到DB与一些时间戳(超时能力)。
所以,这里我很沮丧。我对算法的要求之一是有机会发送令牌,而不是一次,而是多次。我需要这样做的原因是什么信不会发送到电子邮件或一些技术问题,在我这边的结果,那封信不会发送。
因此,让我们回到第一步,允许用户再次填写注册表单。现在我们有了用户刚刚输入的数据和存储在DB中的以前的数据。
我们应该用新的信息替换DB中存在的信息吗?
另一个要求是电子邮件地址是唯一的,将被用作用户的登录。所以我们需要用新的表格来转换上面的表格,它应该在表格中接受一封邮件两次或两次以上。
另一个问题一直困扰着我几天是我如何从DB中删除不必要的令牌?我是否需要在晚上处理一些工作,通过令牌表并删除不需要的令牌?
首先,将注册请求放入成员表之外的另一个表中。
其次,当用户注册后,创建一个令牌来验证电子邮件地址。如果用户在X小时内单击验证该令牌的链接,则删除令牌并在成员关系表中创建该用户。
如果用户请求一个新的令牌,您只需生成它并发送电子邮件消息。如果您覆盖了数据库中的令牌,那么显然第一个电子邮件消息中的链接将不再工作,这很好——用户只能验证最近的令牌。
如果用户在X小时内没有点击验证令牌的链接,那么注册请求可以自动清理,用户将不得不重新注册。您确实可以使用cron类型的作业来实现这一点。
我们应该用新的信息替换数据库中存在的信息吗?
我不确定这是如何发生的,因为你还没有一个经过身份验证的用户。如果您可以确定输入此信息的用户确实已经在数据库中,那么当然,更新该信息。但是,考虑到您正在使用的字段,我不确定您如何能够可靠地知道这一点。
另一个问题一直困扰着我几天是我如何从数据库中删除不必要的令牌?
考虑到你正在使用Sql Server,我会创建一个夜间作业来清除旧的令牌。
希望这对你有帮助!