1

用户完成注册过程后,我们需要向用户发送验证邮件。我知道如何发送电子邮件,但我需要知道发送验证链接的过程是什么,我是否应该在表中创建一个列来保存验证令牌并将其加密发送。如果我们必须保存验证令牌,那么生成此令牌的完美方法是什么。我不尝试任何解决方案。

4

3 回答 3

2

我建议在用户成功注册时生成一个 GUID,如下所示:

Guid theVerificationCode;
theVerificationCode = Guid.NewGuid();

现在将此 GUID 值存储在数据库列中,大概是在类似User的表中。

现在,当您发送电子邮件时,您可以通过查询字符串将此验证码值作为 URL 的一部分提供,如下所示:

string theVerificationCode = GetVerificationCodeFromDatabase();
string theEmailLink = "https://www.yoursite.com/YourApp/Verify.aspx?code=" + theVerificationCode;

最后,您需要在Verify.aspx页面中构建逻辑,以匹配查询字符串中传递的内容与数据库中的内容匹配,如果它们匹配,则您可以允许用户进行身份验证,如果不匹配则显示错误消息。

于 2013-10-17T11:09:03.937 回答
1

我建议有一个名为“ActivationToken”之类的字段并生成一个 GUID。您可以通过调用 newid() 函数直接在 SQL 中执行此操作,或者在 C# 中通过调用 Guid.NewGuid() 来执行此操作。这是一个非常独特/随机的值,几乎不可能暴力破解。

因此,当用户注册时,您将执行以下操作:

insert into tblUsers (Username, Password, Active, ActivationToken) values ('johndoe', 'mypassword', 0, newid())

链接如下: http: //yoururl.com/Activate.aspx ?token= {yourActivationGuid}

Update tblUsers set Active=1 where ActivationToken={yourActivationGuid}

如果您的 UserID 已经是 GUID,那么您可能只使用它就可以逃脱(例如,如果您正在使用 aspnet_user 表)。至于不允许登录,只需检查 Active 标志是否设置为 true。如果不是,则禁止登录。

因此,要验证登录,您可以执行以下操作:

select * from tblUsers where Username="johndoe" and Password="mypassword" and Active=1
于 2013-10-17T11:07:10.743 回答
1

是的,您应该在表中创建一列来保存验证令牌。

您可以将激活码设置为“GUID”

一个简单的方法是:

  1. 通过结合用户 ID、验证令牌和创建日期来构建您的查询字符串。

  2. 对组合字符串进行编码

    "?user=" + Convert.ToBase64String(Encoding.Unicode.GetBytes(String.Format("user={0}&code={1}&cd={2}", 用户 ID, 验证, 创建日期))) ;

  3. 将链接发送给用户

  4. 当您的用户单击链接时,解码查询字符串

  5. 通过使用 "&" 吐出组合值来分隔组合值

    Encoding.Unicode.GetString(Convert.FromBase64String(ActivationDetails)).Split(new Char[] { '&' });

您拥有激活帐户所需的所有值。此外,您可以添加逻辑和加密方法。但是,基础保持不变。

希望这可以帮助。

于 2013-10-17T11:46:16.983 回答