2016-04-14 6 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, что иногда не вредно писать логику cutom, так что вы не полностью зависите от всех рамочных методов и теряете контроль над тем, что я делаю , Большое спасибо :) – Brian

+0

Без проблем, рад, что помогло. Поскольку это ответили на ваш вопрос, вы должны отметить его как принятый ответ. – X3074861X

Смежные вопросы