Этот код работает не так, как вы ожидали, потому что вызов _signInManager.PasswordSignInAsync
только генерирует и устанавливает cookie аутентификации для пользователя и не регистрирует пользователя в данный момент, таким образом, в этом запросе нет зарегистрированного пользователя, и поэтому _signInManager.Context.User
возвращает null
.Пользователь считается авторизованным только при следующем запросе, где запрос содержит этот файл cookie аутентификации.Так что в целом код для входа выглядит так:
_signInManager.PasswordSignInAsync(...);
if (result.Succeeded)
{
return Redirect(...);
}
Но если вы хотите получить информацию о пользователе сразу после входа в систему, вы можете сделать это следующим образом:
if (result.Succeeded)
{
var user = await _signInManager.UserManager.FindByEmailAsync(Input.Email);
IList<Claim> userClaims = await _signInManager.UserManager.GetClaimsAsync(user);
string userRole = userClaims.First(c => c.Type == ClaimTypes.Role).Value;
//...
}
Или если вы хотитеполучить только роли, которые вы можете использовать этот код
var user = await _signInManager.UserManager.FindByEmailAsync(Input.Email);
IList<string> roles = await _signInManager.UserManager.GetRolesAsync(user);
string userRole = roles.First();