有没有人使用自定义令牌进行电子邮件验证,而不必先使用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”路线拿起令牌,使我们能够完成验证过程的其余部分。
而且,这是一个很好主意设置一个到期您的验证令牌用于安全目的 - 24到48小时的时间一般是在可接受的时间框架,以允许用户接收的邮件,点击链接,并验证他们的帐户。
这是我正在寻找的澄清。非常感谢一家工厂。至少现在我知道我可以通过查看该模型在我的用户表中存储令牌。我所看到的例子完全忽略了我关于一些框架方法如何验证和处理这样的问题的更基本的问题。我认为在这里问这个问题的原因很可能是,我正在和另一位Java开发人员交谈,有时写逻辑逻辑并不是坏事,因为你并不完全依赖于所有的框架方法,并且失去对我所做的事情的控制。非常感谢:) – Brian
没问题,很高兴帮助。由于这回答了您的问题,您应该将其标记为接受答案。 – X3074861X