我试图找出为什么在创建新用户帐户时未从我的应用程序发送帐户验证电子邮件的原因。
This article建议在EmailSender.Execute
上设置一个断点。我这样做了,发现确实没有被击中。如何进一步调试?
这样创建用户:
// user is an ApplicationUser-object
IdentityResult result = await userManager.CreateAsync(auto.Map<ApplicationUser>(user), "P&55w0rd");
if (result.Succeeded)
{
ApplicationUser u = await userManager.FindByNameAsync(user.UserName);
if (u != null)
{
// newUser.RN is the role name to be assigned to the new user
await userManager.AddToRoleAsync(u, newUser.RN);
}
return RedirectToAction("Details", new { id = user.Id });
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
创建了一个新用户,将其添加到角色中,我们被重定向到Users / Details / {id},但未发送帐户验证电子邮件。
如果Identity默认情况下仅通过设置EmailSender进行操作,我会感到惊讶。您似乎没有提供任何确认逻辑,也无处致电EmailSender。
您需要在要创建用户的控制器中将IEmailSender
作为服务注入,并添加逻辑以生成确认令牌并实际发送电子邮件。
我希望有类似的行:
var token = await userManager.GenerateEmailConfirmationTokenAsync(user);
var confirmationLink = Url.Action(nameof(ConfirmEmail), "Account",
new { token , email = user.Email },
Request.Scheme);
await _emailSender.SendEmailAsync(user.Email, "Confirmation email link", confirmationLink);
当然,您可以进一步看一下如何使您的电子邮件更漂亮,但这是它的核心。