Asp.Net核心身份,IdentityUser.Email与UserManage <IdentityUser> .GetEmailAsync(IdentityUser用户)

时间:2020-05-28 21:58:25

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

我正在审查Asp.Net Core网站项目中的支架式身份帐户管理页面。更改电子邮件“剃刀”页面中的OnGetAsync()使用UserManager.GetUserAsync()加载当前用户。 然后,它将调用另一种方法来将电子邮件地址和IsEmailConfirmed值加载到页面模型的属性中。

load方法使用UserManager.GetEmailAsync(user)而不是仅user.Email。微软程序员为什么要这么做?

使用UserManager.IsEmailConfirmedAsync(user)代替Is.IsEmailConfirmed对IsEmailConfirmed执行相同的操作。

我想念什么?

public partial class Email : PageModel
{
  public string Email { get; set; }

  [BindProperty]
  public InputModel Input { get; set; }
  public bool IsEmailConfirmed { get; set; }

  public async Task<IActionResult> OnGetAsync()
  {
    var user = await _userManager.GetUserAsync(User);
    if (user == null)
    {
      return NotFound($"Unable to load user with ID '{_userManager.GetUserId(User)}'.");
    }
    // user should be valid here.
    await LoadAsync(user);
    return Page();
  }

  protected async Task LoadAsync(IdentityUser user)
  {
    // user should be valid here.

    // Why not just "string email = user.Email"?
    string email = await _userManager.GetEmailAsync(user);
    Email = email;
    Input = new InputModel { NewEmail = email };

    // Why not just do "IsEmailConfirmed = user.IsEmailConfirmed"?
    IsEmailConfirmed = await _userManager.IsEmailConfirmedAsync(user);
    }

  public class InputModel
  {
  [Required]
  [EmailAddress]
  [Display(Name = "New email")]
  public string NewEmail { get; set; }
  }
}```

1 个答案:

答案 0 :(得分:0)

那一定是一个实现问题。查看github处的UserManager类,GetEmailAsync向数据库以及二人组发出请求。这是不合适的,因为第一个请求已经检索了有关用户的所有信息。您仍然可以自己实现它。