ASP.NET Claim NameIdentifier Id получает ошибку преобразования - PullRequest
0 голосов
/ 29 мая 2018

У меня проблема с этим кодом:

    private async Task<object> GenerateJwtToken(string email, User user)
    {

        var claims = new List<Claim>
        {
            new Claim(JwtRegisteredClaimNames.Sub, email),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
            new Claim(ClaimTypes.NameIdentifier, user.Id)
        };

Расширение пользователя IdentityUser.Проблема в том, что я получаю «Не могу преобразовать из int в System.Security.Claims.ClaimsIdentity».Даже для ClaimTypes.NameIdentifier я получаю ошибку: «Невозможно преобразовать из« строки »в« System.IO.BinaryReader »».И если я меняю Id на что-то другое, например, электронную почту или ошибки firstName исчезают ... Не могу найти информацию об этом.

Ответы [ 2 ]

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

В моем случае у меня была ошибка сборки в сигнатуре моего метода.После исправления ошибка исправлена ​​

Моя подпись метода выглядит следующим образом:

private async Task<User> AuthenticateUserAsync(string email, string password)

После определения исправления ошибка построения класса "Пользователь", связанная с подписью метода.

0 голосов
/ 23 июня 2018

У меня есть эта ошибка в визуальном коде на новом Claim(ClaimTypes.Name, userFromRepo.Username), сообщающем Argument 1: cannot convert from 'string' to 'System.IO.BinaryReader'.Мой код был такой:

    public async Task<IActionResult> ReadUser([FromBody]UserDto userDto){

        User userFromRepo = _authRepository.GetUserAsync();
        //generate token for user
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes("my secret key");
        var tokenDescriptor = new SecurityTokenDescriptor{
            Subject = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
                new Claim(ClaimTypes.Name, userFromRepo.Username) //error here in this ctor

            }),
            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature)
        };

После добавления ключевого слова await, пропущенного перед моим методом репозитория, который, кстати, асинхронный, ошибка исчезла.

    public async Task<IActionResult> ReadUser([FromBody]UserDto userDto){

        User userFromRepo = await _authRepository.GetUserAsync(); //added await
        //generate token for user
        var tokenHandler = new JwtSecurityTokenHandler();
        var key = Encoding.ASCII.GetBytes("my secret key");
        var tokenDescriptor = new SecurityTokenDescriptor{
            Subject = new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, userFromRepo.Id.ToString()),
                new Claim(ClaimTypes.Name, userFromRepo.Username) //error gets fixed

            }),
            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha512Signature)
        };

ВозможноВы сталкивались с чем-то похожим на это?

...