Другой идентификатор пользователя из UserManage - PullRequest
0 голосов
/ 22 января 2019

Я реализовал этот урок , только с одним изменением: MySQL => MS SQL.Но когда пользователь входит в систему, я вижу другой идентификатор пользователя, например:

Пользователь из метода входа: enter image description here id = "2b058ff8-f9d3-4ccf-a5f7-bb528f80a333"

и пользователь из базы данных: enter image description here с идентификатором = "7fe38d73-e940-4e42-bb15-76a72d2000bd"

Что не так с методом входа в систему?Или, может быть, с помощью метода генерации токенов?Однако после регистрации я могу получить нужного пользователя.

Логин:

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

        if (result.Succeeded)
        {
            var appUser = _userManager.Users.SingleOrDefault(r => r.Email == model.Email);
            var token = await GenerateJwtToken(model.Email, appUser);
            return Json(new GenericResponse<string>(true, "", (string)token));
        }

        throw new ApplicationException("INVALID_LOGIN_ATTEMPT");
    }

Регистрация:

[HttpPost]
    public async Task<object> Register([FromBody] RegisterDto model)
    {
        var user = new AidUser
        {
            UserName = model.Email,
            Email = model.Email,
        };
        var result = await _userManager.CreateAsync(user, model.Password);

        if (result.Succeeded)
        {
            //await _userManager.AddToRoleAsync(user, "user");
            await _signInManager.SignInAsync(user, false);
            await _dbContext.SaveChangesAsync();

            var token = await GenerateJwtToken(model.Email, user);

            var profile = new Profile()
            {
                UserId = user.Id,
                Name = model.FirstName,
                LastName = model.LastName,
                CityId = 1
            };

             _dbContext.Profiles.Add(profile);
            await _dbContext.SaveChangesAsync();
            return Json(new GenericResponse<string>(true, "", (string)token));
        }


        throw new ApplicationException("SOMETHINGWENTWRONG");
    }

Генерация токена:

private async Task<object> GenerateJwtToken(string email, IdentityUser user)
    {
        var claims = new List<Claim>
        {
            new Claim(JwtRegisteredClaimNames.Sub, email),
            new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
            new Claim(ClaimTypes.NameIdentifier, user.Id)
        };

        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["JwtKey"]));
        var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
        var expires = DateTime.Now.AddDays(Convert.ToDouble(_configuration["JwtExpireDays"]));

        var token = new JwtSecurityToken(
            _configuration["JwtIssuer"],
            _configuration["JwtIssuer"],
            claims,
            expires: expires,
            signingCredentials: creds
        );

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...