Вот моя ситуация:
Я работаю над приложением, которое потребует входа пользователя.Для пользовательского интерфейса я создал приложение MVC с локальными учетными записями пользователей.Мне придется расширить Пользователь с помощью свойств, которые всегда были довольно резкими и сухими.Я расширил пользователя и переместил его в проект уровня домена.Я также убрал контекст, который, опять же, довольно резкий и сухой, и я делал это несколько раз раньше.
Тем не менее, Identity Core кажется ... другим.Я бы использовал пользовательский интерфейс по умолчанию, если представления были открыты, но они, кажется, где-то глубоко в пакете Nuget (это другой вопрос, который у меня есть).
Мой контекст наследует класс IdentityDbContext:
public class MyContext : IdentityDbContext<User, IdentityRole, string>, IMyContext
Я регистрирую идентификационные данные в Startup.cs:
services
.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<MyContext>()
.AddDefaultTokenProviders();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddAuthorization();
Я создал AuthorizationManager, который предназначен для работы с чем-либо в домене авторизации.Я ввожу userManager и signInManager:
public AuthorizationManager(UserManager<User> userManager,
SignInManager<User> signInManager,
IMapper mapper)
{
_signInManager = signInManager;
_userManager = userManager;
_mapper = mapper;
}
А затем Войти в систему пользователя так:
public async Task<UserDto> LoginUser(UserLoginInput input)
{
var user = input.UserNameOrEmail.Contains("@") ?
await _userManager.FindByEmailAsync(input.UserNameOrEmail) :
await _userManager.FindByNameAsync(input.UserNameOrEmail);
var signInResult = await _signInManager.CheckPasswordSignInAsync(user, input.Password, false);
return signInResult.Succeeded ?
_mapper.Map<UserDto>(user) :
null;
}
Результат входа в систему дает мне Успешный, но после этого я никогда не смогучтобы получить доступ к этому пользователю или роли, которые они выполняют.Я проверил, есть ли пользователь и роль в базе данных, и существует ли ссылка на UserRole.Но со всем этим я все еще возвращаю нуль:
var user = await _userManager.GetUserAsync(HttpContext.User);
Я подозреваю, что я не совсем подключен к AspNetCores Identity, но после пары дней прохождения этого я не могу точно определить где или почему .Буду признателен за любую помощь или понимание.
Обновление
Не уверен, если это связано, но я также настраиваю Cookie приложения как часть запуска:
services.ConfigureApplicationCookie(options =>
{
options.AccessDeniedPath = "/Authorization/AccessDenied";
options.Cookie.Name = "MyApplication_Auth";
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromDays(7);
options.LoginPath = "/Authorization/Login";
options.ReturnUrlParameter = CookieAuthenticationDefaults.ReturnUrlParameter;
options.SlidingExpiration = true;
});