Использование кода идентификации MVC из настольного приложения
Я пытаюсь использовать код MVC Identity из настольного приложения. Настольное приложение должно вносить кучу дополнений и обновлений в мои пользовательские данные.
Я скопировал классы из сгенерированного приложения MVC, установил необходимые пакеты и внес все изменения, необходимые для компиляции кода.
Единственная проблема, которую я имею сейчас, - это создание экземпляра класса ApplicationUserManager
.
public ApplicationUserManager UserManager
{
get => _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
private set
{
_userManager = value;
}
}
private ApplicationUserManager _userManager;
Проблема в том, что у меня нет HttpContext
, и поэтому HttpContext.Current
всегда будет возвращать HttpContext.Current
.
Возможно ли то, что я делаю? Как я могу создать UserManager
из настольного приложения без HTTP-контекста?
ОБНОВИТЬ:
У меня есть прямой доступ к базе данных, поэтому я был бы счастлив с решением, которое не требует кода и классов Identity. Самым большим препятствием здесь будет создание и обновление паролей, чтобы их можно было "понять" с помощью кода Identity в моем приложении на веб-сайте.
Ответы
Ответ 1
интересный подход,
в противном случае необходимо будет очистить все, что касается httpcontext.
Вы можете создать экземпляр ApplicationUserManager следующим образом.
public ApplicationUserManager UserManager
{
get
{
if(_userManager == null)
{
_userManager = new ApplicationUserManager(new Microsoft.AspNet.Identity.EntityFramework.UserStore<ApplicationUser>(yourDbContext));
}
return _userManager;
}
}
Ответ 2
Вы можете сделать так:
var context = ApplicationDbContext.Create();
var userStore = new UserStore<ApplicationUser>(context);
var userManager = new UserManager<ApplicationUser>(userStore);
//change password
var result = userManager.ChangePasswordAsync("userId", "oldPwd", "newPwd");