用户完成注册过程后,我们需要向用户发送验证邮件。 我知道如何发送电子邮件,但我需要知道发送验证链接的过程是什么,我应该在表中创建一个列来保存验证令牌并将其加密发送。如果我们必须保存验证令牌,那么生成此令牌的完美方式是什么。我不尝试任何解决方案。
答案 0 :(得分: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
页面中构建逻辑,该逻辑将匹配查询字符串中传递的内容与数据库中的内容匹配,如果它们匹配,那么您可以允许用户进行身份验证,如果不匹配然后显示错误信息。
答案 1 :(得分:1)
我建议使用名为“ActivationToken”的字段并生成GUID。您可以通过调用newid()函数直接在SQL中执行此操作,或者通过调用Guid.NewGuid()在C#中执行此操作。这是一个非常独特/随机的值,几乎不可能暴力。
因此,当用户注册时,您会执行以下操作:
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
答案 2 :(得分:1)
是的,您应该在表格中创建一个列以保存验证令牌。
您可以将激活码设为" GUID"
一种简单的方法是:
通过组合User-ID,验证令牌和Creation-date来构建您的查询字符串。
对组合字符串进行编码
"用户=" + Convert.ToBase64String(Encoding.Unicode.GetBytes(String.Format(" user = {0}& code = {1}& cd = {2}",User-ID,verification,Creation -date)));
将链接发送给用户
当您的用户点击该链接时,请解码查询字符串
通过使用"&"
进行拼接来分隔合并后的值Encoding.Unicode.GetString(Convert.FromBase64String(ActivationDetails))。Split(new Char [] {'&'});
您拥有激活帐户所需的所有值。此外,您还可以添加逻辑和加密方法。但是,基数保持不变。
希望这有帮助。