使用数字代码实施电子邮件确认

时间:2019-04-04 09:24:13

标签: c# asp.net-core asp.net-identity

我想为.net核心Web应用程序实施带有数字代码的电子邮件确认。 我利用了UserManager类中的GenerateEmailConfirmationTokenAsync,但它返回的是令牌而不是数字代码。我想我应该使用IUserTokenProvider接口创建一个自定义实现,但找不到任何示例。

如何使用IUserTokenProvider实现此功能?

2 个答案:

答案 0 :(得分:3)

您使用该令牌生成操作回调网址

[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

答案 1 :(得分:0)

ASP.NET Core Identity中已有一个实现。

TotpSecurityStampBasedTokenProvider类(IUserTwoFactorTokenProvider接口的实现)会生成6位数字的令牌,这些令牌将过期。

TotpSecurityStampBasedTokenProviderEmailTokenProvider进一步继承,但是GenerateAsync方法是从TotpSecurityStampBasedTokenProvider重用的(未被覆盖)。

这些类使用用户的安全标记来生成令牌,并提供自己的修饰符,但是实际的令牌生成是通过GenerateCode类中的Rfc6238AuthenticationService方法完成的。

因此,您可以使用现有的实现:

  • TotpSecurityStampBasedTokenProvider
  • EmailTokenProvider(与上述相同)
  • Rfc6238AuthenticationService,如果您确实要自定义令牌