【问题标题】:Owin not returning UserManagerOwin 没有返回 UserManager
【发布时间】:2015-10-11 12:03:07
【问题描述】:

我在控制器操作中调用了以下内容:

private ApplicationUserManager ApplicationUserManager
    => HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

我的 IdentityConfig 看起来像:

internal class IdentityConfig
{
    public void Configuration(IAppBuilder appBuilder)
    {
        appBuilder.CreatePerOwinContext(ApplicationIdentityDbContext.Create);
        appBuilder.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        appBuilder.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

        var cookieAuthenticationOptions = new CookieAuthenticationOptions
                                          {
                                              AuthenticationType =
                                                  DefaultAuthenticationTypes
                                                  .ApplicationCookie,
                                              LoginPath =
                                                  new PathString("/Home/Login")
                                          };
        appBuilder.UseCookieAuthentication(cookieAuthenticationOptions);
    }
}

我可以逐步查看配置被调用并且Create 方法被调用并且不返回null

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options,
                                                IOwinContext context)
{
    var db = context.Get<ApplicationIdentityDbContext>();
    var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(db));
    manager.PasswordValidator = new PasswordValidator();

    return manager;
}

当我得到ApplicationUserManager 时,它是空的。

public class AccountController : Controller
{
    private ApplicationUserManager ApplicationUserManager
        => HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        var user = await ApplicationUserManager.FindAsync(model.Username, model.Password);  // <- Null reference exception

        // ...
    }
}

我在这里错过了什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-identity owin asp.net-identity-2


    【解决方案1】:

    修复并不令人满意。

    卸载所有与 Owin 和 Identity 相关的 Nuget 包,注释掉所有未构建的内容,然后重新启动 Visual Studio,清理并重新构建,然后再次重新安装包。

    安装后,由于某些原因,它们不是最新的,因此您需要返回并全部升级。

    现在再次取消注释并重建。突然,它起作用了!

    不是一个好的解决方案。

    【讨论】:

    • 遗憾的是,这个解决方案实际上也帮助了我。
    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多