Я реализовал этот урок , только с одним изменением: MySQL => MS SQL.Но когда пользователь входит в систему, я вижу другой идентификатор пользователя, например:
Пользователь из метода входа:
id = "2b058ff8-f9d3-4ccf-a5f7-bb528f80a333"
и пользователь из базы данных:
с идентификатором = "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);
}