Как получить данные пользователя сразу после входа в систему с использованием Identity в ASP.NET Core? - PullRequest
0 голосов
/ 25 января 2019

Я использую ASP.NET Core Identity для проверки подлинности на своем веб-сайте и пытаюсь зарегистрировать идентификатор пользователя в БД, как только он войдет в систему, но, похоже, я не могу получить к ним доступ с помощью следующий код GetResult() возвращает здесь ноль, но он отлично работает, если он находится на следующей странице, но только не в методе OnPostAsync, где он должен быть. Input.UserIDOrLogonName не содержит идентификатор пользователя.

private readonly SignInManager<User> _signInManager;
private readonly UserManager<User> _userManager;

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
    returnUrl = returnUrl ?? Url.Content("~/");
    if (ModelState.IsValid)
    {
        var result = await _signInManager.PasswordSignInAsync(Input.UserIDOrLogonName, Input.Password, Input.RememberMe, lockoutOnFailure: true);
        if (result.Succeeded)
        {
            var userId = _userManager.GetUserAsync(HttpContext.User)
                         .GetAwaiter().GetResult().UserId;
            _audit.RecordAction(AuditType.LoginSuccess, userId);
            return LocalRedirect(returnUrl);
        }

Есть ли другой способ добраться до экземпляра пользователя?

1 Ответ

0 голосов
/ 28 января 2019

Для HttpContext.User, он будет работать для подзапроса после входа в систему.

Если вы хотите авторизовать UserId, попробуйте найти пользователя по электронной почте, например

if (result.Succeeded)
{
    var user = await _userManager.FindByEmailAsync(Input.Email);
    var userId = user.Id;
    _logger.LogInformation("User logged in.");
    return LocalRedirect(returnUrl);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...