这节中我们主要讲解在ASP.NET Core Identity中如何启用电子邮件确认,ASP.NET Core Identity邮件确认是为了验证注册的用户是真人,而不是机器人,意味着注册的用户实际上是他们提供的电子邮件的所有者,Identity提供了在用户注册过程中启用电子邮件确认的选项


2、实现电子邮件确认

var confirmationLink = Url.Action("ConfirmEmail", "Email", new { token, email = user.Email }, Request.Scheme).链接地址将被发送到用户的邮箱,我们可以看到链接指向的是当前Controller类的ConfirmEmail方法,在查询字符串中添加了token和email参数,ConfirmEmail方法使用ASP.NET Core模型绑定能获取该值
当用户点击他的邮件确认地址时,ASP.NET Core Identity 会验证用户的邮件,因此我们需要创建一个ConfirmEmail来确认用户的邮件地址, 当用户点击验证链接时,这个方法将被调用
public class EmailController : Controller{private UserManager<AppUser> _userManager;public EmailController(UserManager<AppUser> userManager){_userManager = userManager;}public IActionResult Index(){return View();}public async Task<IActionResult> ConfirmEmail(string token, string email){var user = await _userManager.FindByEmailAsync(email);if (user == null){return View("Error");}var result = await _userManager.ConfirmEmailAsync(user, token);return View(result.Succeeded ? "ConfirmEmail" : "Error");}}


下面,我们检查一下邮箱:
我们打开这个邮件地址,会看到跳转到如下图:


5、修改登录方法
[HttpPost][AllowAnonymous][ValidateAntiForgeryToken]public async Task<IActionResult> Login(Login login){if (ModelState.IsValid){var appUser = await _userManager.FindByEmailAsync(login.Email);if (appUser != null){await _signInManager.SignOutAsync();var signInResult = await _signInManager.PasswordSignInAsync(appUser, login.Password,login.RememberMe, false);if (signInResult.Succeeded){return Redirect(login.ReturnUrl ?? "/");}var emailStatus=await _userManager.IsEmailConfirmedAsync(appUser);if(emailStatus==false){ModelState.AddModelError(nameof(login.Email),"Email为确认,请首先确认!");}#region 启用2FA登录//if (appUser.TwoFactorEnabled)//{// return RedirectToAction("LoginTwoStep", new { Email = appUser.Email, ReturnUrl = login.ReturnUrl });//}#endregion}ModelState.AddModelError(nameof(login.Email), "Login Failed: Invalid Email or password");}return View(login);}
总结
源代码地址:
https://github.com/bingbing-gui/Asp.Net-Core-Skill/tree/master/AspNetCore.Identity/Identity