强大的电子邮件验证算法

时间:2011-11-29 14:35:53

标签: c# asp.net .net sql-server asp.net-mvc-3

我正在开发注册向导,目前面临强大的电子邮件验证算法问题。

  1. 在我们获得用户指定的信息(例如first namepasswordemail后,我们应将此信息保存到DB。让我们说我们已经为这个字符串提供了适当的表格。

  2. 接下来,我们会生成一些电子邮件验证令牌(只是生成的代码,包含一堆字符和数字),并将其保存到带有一些时间戳的DB(用于超时功能)。

  3. 所以,我很沮丧。我对算法的一个要求是不仅可以发送一次令牌,也可以多次发送令牌。我之所以要求这样,是因为这封信不会发送到我的电子邮件或者我的一些技术问题。

    因此,让我们返回第一步并再次允许用户填写注册表单。现在我们有用户刚输入的数据和存储在DB中的先前数据。

    我们是否应该用新的信息替换DB中存在的信息?

    另一个要求是电子邮件地址是唯一的,并将用作用户登录。因此,我们需要在表格中使用新表格进行转换,在表格中应该接受两次或更多次电子邮件。

    另外一个困扰我好几天的问题是如何从数据库中删除不必要的令牌?我是否需要在晚上通过令牌表来删除一些工作并删除那些令牌不需要的?

2 个答案:

答案 0 :(得分:4)

首先,将注册请求放入成员资格表的单独表格中。

其次,当用户注册时,您创建一个用于验证电子邮件地址的令牌。如果用户在X小时内单击验证该令牌的链接,则删除该令牌并在成员资格表中创建该用户。

如果用户请求新令牌,您只需生成它并发送电子邮件即可。如果您覆盖数据库中的令牌,那么显然第一封电子邮件中的链接将不再起作用,这很好 - 用户只能验证最新的令牌。

如果用户未在X小时内单击验证令牌的链接,则自动清理注册请求,用户必须重新注册。你可以用cron类型的工作来做到这一点。

我希望这会有所帮助。

答案 1 :(得分:1)

  

我们应该用新的信息替换DB中存在的信息吗?

鉴于您还没有经过身份验证的用户,我不确定会发生这种情况。如果您可以确定输入此信息的用户肯定已经在数据库中,那么请确保更新该信息。但是,考虑到你正在服用的领域,我不确定你怎么能够可靠地知道这一点。

  

另一个困扰我好几天的问题是如何从数据库中删除不必要的令牌?

鉴于您使用的是Sql Server,我只需创建一个夜间作业来清除旧令牌。

希望这有帮助!