【问题标题】:Identity 2.0 / Owin / ApplicationUser from azure Webjob来自 azure Webjob 的 Identity 2.0 / Owin / ApplicationUser
【发布时间】:2016-07-06 14:35:43
【问题描述】:

我正在尝试从我的 azure Webjob 为我的 mvc 应用程序运行清理作业。我可以毫无问题地进行标准数据库更新,但无法清理 aspnetuser 帐户,因为我无法获得 ApplicationUser 上下文,因为 Owin 没有启动类。

有人对如何做到这一点或一些虚拟代码有任何想法吗?到目前为止,我的谷歌搜索一直是空白的。

谢谢。

【问题讨论】:

    标签: asp.net-mvc azure owin azure-webjobs


    【解决方案1】:

    我正在使用 VS 2015 运行 ASP.net MVC 5

    实际上即使ApplicationUserManager 需要OwinContext,你也可以去掉OwinContextOwinContext 仅对访问绑定到OWinContextApplicationDbConbtext 有用。

    所以我重构了ApplicationUserManagerCreate 工厂方法,以便能够在启动时(或在WebJob 中)管理用户,而无需任何OwinContext

    public static ApplicationUserManager Create(
                      IdentityFactoryOptions<ApplicationUserManager> options,
                      IOwinContext context)
    {
        ApplicationDbContext dbContext = context.Get<ApplicationDbContext>();
        return Create(options, dbContext);
    }
    
    internal static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, Applicatio
    {
        // Create ApplicationUserManager myself instead of finding it on OwinContext
        var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context));
    
        // old code already generated by VS wizard
    }
    

    然后我使用ApplicationUserManager

    using (ApplicationDbContext applicationDbContext = new ApplicationDbContext())  
    {
        var options = new IdentityFactoryOptions<ApplicationUserManager>
        {
            //DataProtectionProvider = app.GetDataProtectionProvider(),
        };
        ApplicationUserManager userManager = ApplicationUserManager.Create(options, applicationDbContext);
        // ApplicationRoleManager has been changed the same way to be usable without OwinContext
        ApplicationRoleManager appRoleManager = ApplicationRoleManager.Create(applicationDbContext);
    
        //  ... Code using ApplicationUserManager and ApplicationRoleManager
        ApplicationUser appUser = userManager.FindByEmailAsync(email).Result;
        // ...
        IdentityResult result = userManager.CreateAsync(appUser, password).Result;
    
        }
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2015-08-09
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-10
      相关资源
      最近更新 更多