我见过许多示例,其中用户确认注册是通过使用通过WebSecurity生成的令牌完成的,该令牌链接到简单成员资格但是为了控制我自己的代码,我写了很多用户注册和使用实体框架从头开始登录以进行数据库访问,而不是试图对抗繁琐的自动生成的模板,这些模板不会让我对发生的事情进行细分,这让我对发生的事情没有信心。我必须说实话,我对他们的感觉是因为他们没有显示任何关于用户数据库如何与我编写的任何自定义函数交互的代码。
所以我的查询是否有人使用自定义令牌进行电子邮件验证,而不必使用websecurity.CreateAccount方法?
我必须对已经完美的声音和功能代码进行一些重构,这将是一个耻辱。非常感谢提前
答案 0 :(得分:2)
是否有人使用自定义令牌进行电子邮件验证,而不必使用websecurity.CreateAccount方法?
绝对 - 我们为所有电子邮件验证令牌执行此操作,这是我们的" CreateAccount"处理。您可以执行以下操作来生成令牌:
public static string GenerateEmailToken()
{
// generate an email verification token for the user
using (RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider())
{
byte[] data = new byte[16];
provider.GetBytes(data);
return Convert.ToBase64String(data);
}
}
然后我将其包含在我们的" CreateAccountResponse"中,它允许控制器拿起它并发送包含令牌的验证邮件 - 为您提供一个想法:
public class CreateAccountResponse
{
public bool CreatedSuccessfully { get; set; }
public string EmailVerificationToken { get; set; }
}
然后我们在这处理:
CreateAccountResponse response = _mediator.Send(createAccountCommand);
if (response.CreatedSuccessfully)
{
if (!string.IsNullOrEmpty(response.EmailVerificationToken))
{
// Send the verification email if a token is present
SendVerificationEmail(model.Email, response.EmailVerificationToken);
}
return RedirectToAction("Settings", "Account");
}
然后使用令牌,我们创建完全格式化的URL以包含在您发送给该用户的电子邮件中
private void SendVerificationEmail(string emailAddress, string token)
{
try
{
// Url.Action will encode parameters as they are needed.
var verificationUrl = Url.Action("VerifyAccount", "Account", new { token = token }, Request.Url.Scheme);
_userMailer.DeliverVerification(emailAddress, verificationUrl);
}
catch (Exception ex)
{
_logger.ErrorLog.Log(new VerificationError(ex));
}
}
点击电子邮件中的链接后,我们的" VerifyAccount" route选择令牌并允许我们完成剩余的验证过程。
此外,出于安全考虑,为验证令牌设置过期是非常好的想法 - 24到48小时通常是可接受的时间范围允许用户接收电子邮件,点击链接,然后验证他们的帐户。