AuthenticationManager引用丢失

时间:2014-02-05 17:13:27

标签: asp.net asp.net-mvc entity-framework asp.net-identity

跟进this问题后,缺少方法SignOut()SignIn()的引用:

private async Task SignInAsync(User user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}

有人知道如何解决它吗?

5 个答案:

答案 0 :(得分:9)

您是如何定义 AuthenticationManager 属性的?通常它应如下所示:

private IAuthenticationManager AuthenticationManager
{
  get
  {
    return HttpContext.GetOwinContext().Authentication;
  }
}

有了这个,您应该可以调用 SignOut SignIn 方法。

答案 1 :(得分:3)

如果您在控制器外呼叫,则应按以下方式定义AuthenticationManager。

    private IAuthenticationManager AuthenticationManager
    {
        get
        {
            return HttpContext.Current.GetOwinContext().Authentication;
        }
    }

答案 2 :(得分:1)

GetOwinContext()是Microsoft.Owin.Host.SystemWeb.dll中存在的扩展方法。

您必须添加Microsoft.Owin.Host.SystemWeb NuGet包。

它是System.Web命名空间的一部分。因此,请确保在使用部分中包含System.Web。

答案 3 :(得分:0)

您可能已包含System.Net而不是Microsoft.Owin.Security。两者都有AuthenticationManager类的定义。

答案 4 :(得分:-1)

应在Microsoft.Owin.Security命名空间中定义方法。您可以检查项目中是否正确引用了Microsoft.Owin dll