【问题标题】:Using MVC Identity code from desktop application从桌面应用程序使用 MVC 身份代码
【发布时间】:2019-07-06 14:57:02
【问题描述】:

我正在尝试使用桌面应用程序中的 MVC 身份代码。桌面应用程序需要对我的用户数据进行大量添加和更新。

我已经从生成的 MVC 应用程序中复制了类,安装了所需的包并进行了代码编译所需的所有更改。

我现在唯一的问题是创建ApplicationUserManager 类的实例。

public ApplicationUserManager UserManager
{
    get => _userManager ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
    private set
    {
        _userManager = value;
    }
}
private ApplicationUserManager _userManager;

问题是我没有HttpContext,所以HttpContext.Current 总是返回null。

我正在做的事情可能吗?如何在没有 HTTP 上下文的情况下从桌面应用程序构建 UserManager

更新:

我可以直接访问数据库,因此我对不需要身份代码和类的解决方案感到满意。这里最大的障碍是创建和更新密码,以便我的网站应用程序中的身份代码可以“理解”它们。

【问题讨论】:

  • 根据您的更新判断,您正在寻找PasswordHasher 类。这将允许您比较密码并为用户散列新密码。但是,UserManager 类通常会为您提供很多功能,而无需深入了解HttpContext
  • @trailmax:这看起来很有趣,但它似乎支持多个哈希版本。我会再看一些,但到目前为止还没有找到明确的文档说明哪些(哪些)可以与 MVC 身份代码一起使用。
  • 你已经得到了一些答案,但这看起来与stackoverflow.com/questions/42556258/…基本相同的问题
  • @JonathanWood 您是否考虑过将所需功能公开为从桌面应用程序调用的 Web API?
  • @Nkosi:不,这是一个有趣的想法。但是我需要更新数百条记录并测试每条记录是否已经存在。所以这不是最有效的方法。工作完成后需要拉取 Web API。

标签: c# asp.net-mvc asp.net-identity owin


【解决方案1】:

有趣的方法,

否则,将有必要清除 httpcontext 触及的所有内容..

你可以像这样创建 ApplicationUserManager 实例。

public ApplicationUserManager UserManager
{
    get
    { 
        if(_userManager == null)
        {
            _userManager =  new ApplicationUserManager(new Microsoft.AspNet.Identity.EntityFramework.UserStore<ApplicationUser>(yourDbContext));
        }
        return _userManager;
    }
}

【讨论】:

  • 考虑将Lazy&lt;T&gt; 用于Lazy Initialization。如果您需要线程安全,它会省去很多麻烦。
  • 这似乎是对所提问题的最直接回答。但是,使用这种方法,DbContext 必须包含所需表的数据模型。我的没有。最后,看起来我将遵循@trailmax 的建议,直接访问数据库并使用PasswordHasher 添加和更新密码哈希。我还有一些细节需要解决,但到目前为止,这似乎对我来说效果最好。
【解决方案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");

【讨论】:

  • 谢谢。但是,这似乎重复了 levent 的答案。
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
相关资源
最近更新 更多