57
задан 30 April 2018 в 23:09

2 ответа

Я поместил что-то вроде этого в свой Класс контроллера, и он работал:

IdentityUser user = await userManager.FindByNameAsync(HttpContext.User.Identity.Name);

, где userManager является экземпляром Microsoft. AspNetCore. Идентификационные данные. Класс UserManager (со всей странной установкой, которая идет с ним).

0
ответ дан 1 November 2019 в 16:05

Просто, если кому-либо интересно, это работало на меня. У меня есть пользовательские Идентификационные данные, которые используют интервал для первичного ключа, таким образом, я переопределил метод GetUserAsync

, GetUserAsync

public override Task<User> GetUserAsync(ClaimsPrincipal principal)
{
    var userId = GetUserId(principal);
    return FindByNameAsync(userId);
}

Переопределения Получает Пользователя Идентификационных данных

var user = await _userManager.GetUserAsync(User);

при использовании регулярного первичного ключа Гуида, Вы не должны переопределять GetUserAsync. Это все предполагает, что Вы маркер настроены правильно.

public async Task<string> GenerateTokenAsync(string email)
{
    var user = await _userManager.FindByEmailAsync(email);
    var tokenHandler = new JwtSecurityTokenHandler();
    var key = Encoding.ASCII.GetBytes(_tokenProviderOptions.SecretKey);

    var userRoles = await _userManager.GetRolesAsync(user);
    var roles = userRoles.Select(o => new Claim(ClaimTypes.Role, o));

    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, user.UserName),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
        new Claim(JwtRegisteredClaimNames.Iat, DateTime.UtcNow.ToString(CultureInfo.CurrentCulture)),
        new Claim(JwtRegisteredClaimNames.GivenName, user.FirstName),
        new Claim(JwtRegisteredClaimNames.FamilyName, user.LastName),
        new Claim(JwtRegisteredClaimNames.Email, user.Email),
    }
    .Union(roles);

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(claims),
        Expires = DateTime.UtcNow.AddHours(_tokenProviderOptions.Expires),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };

    var token = tokenHandler.CreateToken(tokenDescriptor);

    return Task.FromResult(new JwtSecurityTokenHandler().WriteToken(token)).Result;
}
0
ответ дан 1 November 2019 в 16:05

Другие вопросы по тегам:

Похожие вопросы: