Реализовать подтверждение по электронной почте с цифровым кодом - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу реализовать подтверждение по электронной почте с цифровым кодом для моего основного веб-приложения .net.Я использую GenerateEmailConfirmationTokenAsync из класса UserManager, но он возвращает токен вместо цифрового кода.Я думаю, что я должен создать пользовательскую реализацию, используя интерфейс IUserTokenProvider, но я не могу найти ни одного примера.

Как я могу реализовать это с помощью IUserTokenProvider?

Ответы [ 2 ]

3 голосов
/ 04 апреля 2019

Этот токен используется для создания URL-адреса обратного вызова действия

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);
        if (result.Succeeded)
        {
            var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
            var callbackUrl = Url.Action(
               "ConfirmEmail", "Account", 
               new { userId = user.Id, code = code }, 
               protocol: Request.Url.Scheme);

            await UserManager.SendEmailAsync(user.Id, 
               "Confirm your account", 
               "Please confirm your account by clicking this link: <a href=\"" 
                                               + callbackUrl + "\">link</a>");
            // ViewBag.Link = callbackUrl;   // Used only for initial demo.
            return View("DisplayEmail");
        }
        AddErrors(result);
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity

0 голосов
/ 04 апреля 2019

Существует существующая реализация в ASP.NET Core Identity, которая делает это.

Класс TotpSecurityStampBasedTokenProvider (реализация интерфейса IUserTwoFactorTokenProvider ) генерирует токены из 6 цифрсрок действия которого истекает.

TotpSecurityStampBasedTokenProvider далее наследуется EmailTokenProvider , но GenerateAsync метод используется повторно из TotpSecurityStampBasedTokenProvider (не переопределяется).

Эти классы используют штамп безопасности пользователя для генерации токенов и предоставляют свои собственные модификаторы, но фактическая генерация токенов выполняется методом GenerateCode из Rfc6238AuthenticationService class.

Итак,Вы можете использовать существующие реализации:

  • TotpSecurityStampBasedTokenProvider
  • EmailTokenProvider (он делает то же, что и выше)
  • Rfc6238AuthenticationService, если вы действительнохотите настроить токен
...