2016-04-14 118 views
1

我见过很多示例,其中用户确认注册是通过使用通过WebSecurity生成的链接到简单成员身份但为了控制我自己的代码生成的令牌完成的我已经写了一个很多用户注册并从零开始使用数据库访问的实体框架登录,而不是尝试与繁琐的自动生成的模板进行战斗,这些模板让我无法了解正在发生的事情,并使我对正在发生的事情没有信心。我必须诚实地说,我对他们的感受是,他们没有展示任何代码,以了解用户db如何与我编写的任何自定义函数进行交互。电子邮件确认Asp.net MVC

所以我的查询是否有人使用自定义令牌进行电子邮件验证,而不必先使用websecurity.CreateAccount方法?

我将不得不做一些重构已完美的声音和功能的代码,这将是一个耻辱。非常感谢提前

回答

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”路线拿起令牌,使我们能够完成验证过程的其余部分。

而且,这是一个很好主意设置一个到期您的验证令牌用于安全目的 - 24到48小时的时间一般是在可接受的时间框架,以允许用户接收的邮件,点击链接,并验证他们的帐户。

+0

这是我正在寻找的澄清。非常感谢一家工厂。至少现在我知道我可以通过查看该模型在我的用户表中存储令牌。我所看到的例子完全忽略了我关于一些框架方法如何验证和处理这样的问题的更基本的问题。我认为在这里问这个问题的原因很可能是,我正在和另一位Java开发人员交谈,有时写逻辑逻辑并不是坏事,因为你并不完全依赖于所有的框架方法,并且失去对我所做的事情的控制。非常感谢:) – Brian

+0

没问题,很高兴帮助。由于这回答了您的问题,您应该将其标记为接受答案。 – X3074861X