用户完成注册过程后,我们需要向用户发送验证邮件。我知道如何发送电子邮件,但我需要知道发送验证链接的过程是什么,我是否应该在表中创建一个列来保存验证令牌并将其加密发送。如果我们必须保存验证令牌,那么生成此令牌的完美方法是什么。我不尝试任何解决方案。
3 回答
我建议在用户成功注册时生成一个 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
页面中构建逻辑,以匹配查询字符串中传递的内容与数据库中的内容匹配,如果它们匹配,则您可以允许用户进行身份验证,如果不匹配则显示错误消息。
我建议有一个名为“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
是的,您应该在表中创建一列来保存验证令牌。
您可以将激活码设置为“GUID”
一个简单的方法是:
通过结合用户 ID、验证令牌和创建日期来构建您的查询字符串。
对组合字符串进行编码
"?user=" + Convert.ToBase64String(Encoding.Unicode.GetBytes(String.Format("user={0}&code={1}&cd={2}", 用户 ID, 验证, 创建日期))) ;
将链接发送给用户
当您的用户单击链接时,解码查询字符串
通过使用 "&" 吐出组合值来分隔组合值
Encoding.Unicode.GetString(Convert.FromBase64String(ActivationDetails)).Split(new Char[] { '&' });
您拥有激活帐户所需的所有值。此外,您可以添加逻辑和加密方法。但是,基础保持不变。
希望这可以帮助。