Asp. Net Core Identity, IdentityUser.Email по сравнению с UserManage <IdentityUser>.GetEmailAsyn c (пользователь IdentityUser) - PullRequest
0 голосов
/ 29 мая 2020

Я просматриваю стандартные страницы управления учетными записями идентификационных данных в проекте Asp. Net Core веб-сайта. OnGetAsyn c () на странице Razor электронной почты для изменения загружает текущего пользователя с помощью UserManager.GetUserAsyn c (). Затем он вызывает другой метод для загрузки адреса электронной почты и значения IsEmailConfirmed в свойства модели страницы.

Метод загрузки использует UserManager.GetEmailAsyn c (user) вместо только user.Email. Зачем кодировщикам Microsoft это делать?

То же самое и с IsEmailConfirmed, используя UserManager.IsEmailConfirmedAsyn c (user) вместо user.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 голосов
/ 29 мая 2020

Это должно быть проблемой реализации. Глядя на класс UserManager по адресу github , GetEmailAsync делает запрос к базе данных, а также к дуэту. Это неправильно, поскольку первый запрос уже извлекает все о пользователе. В любом случае вы можете реализовать это самостоятельно.

...