Как получить заявки пользователей после входа в систему через SignInManager в ASP .NET CORE Identity? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть проект ASP .NET Core 2.0, в котором я использую Microsoft Identity Framework для аутентификации / авторизации.У меня есть следующий метод, который проверяет пользователя по имени пользователя и паролю и возвращает количество претензий.Пользователь, которому я пытаюсь войти, найден в базе данных, но его претензии возвращаются 0 здесь - в базе данных претензии существуют против пользователя (см. Изображение enter image description here).

    [HttpPost("login")]
    public async Task<object> Login([FromBody] LoginDto model)
    {
        var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, false, false);

        if (result.Succeeded)
        {
            var appUser = _signInManager.UserManager.Users.SingleOrDefault(r => r.Email == model.Email);
            var userClaims = await _signInManager.UserManager.GetClaimsAsync(appUser); // this is returning 0 claims

            return Ok(HttpContext.User.Claims.Count());
        }

       throw new ApplicationException("INVALID_LOGIN_ATTEMPT");
    }

Ответы на возможный повторяющийся вопрос не решили мою проблему.

1 Ответ

0 голосов
/ 17 сентября 2018

Для UserManager.GetClaimsAsync запрос будет поступать из AspNetUserClaims вместо AspNetUserRoles.Вы можете проверить это с помощью GetClaimsAsync

return await UserClaims.Where(uc => uc.UserId.Equals(user.Id)).Select(c => c.ToClaim()).ToListAsync(cancellationToken);

В общем, мы можем попробовать HttpContext.User.Claims, чтобы получить заявки для пользователя, но это будет работать для подзапроса вместо текущего входа в системузапрос.Если вы переместите это действие HttpContext.User.Claims на Home Index, оно вернет ожидаемый результат.

Для получения претензий в Login советую попробовать

                var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(appUser);
                var claims = claimsPrincipal.Claims.ToList();
...