2014-01-15 47 views
0

我正在尝试实施cookie身份验证。这里是我的登录操作:ASP.NET WebApi2/MVC5 cookie身份验证

public async Task<IHttpActionResult> Login([FromBody]string email) 
{ 
    var user = await UserManager.FindByNameAsync(email); 
    Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie); 
    var identity = 
        await UserManager.CreateIdentityAsync(user, 
        DefaultAuthenticationTypes.ApplicationCookie); 
        // identity.IsAuthenticated is true, why? 
    Authentication.SignIn(identity); // identity is correct (name is [email protected]), i checked it 
    // User.Identity.IsAuthenticated is false here 
    return Ok(); 
} 

认证是:

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

但User.Identity.Name仍然是空的。我做错了什么?我如何获得认证用户?

这里是我的Startup.Auth:

public partial class Startup 
{ 
    static Startup() 
    { 
     var userManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext())); 
     userManager.UserValidator = new UserValidator<IdentityUser>(userManager) 
     { 
      AllowOnlyAlphanumericUserNames = false, 
     }; 
     UserManagerFactory =() => userManager; 
    } 

    public static Func<UserManager<IdentityUser>> UserManagerFactory { get; set; } 

    public void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
    } 
} 

回答

0

尝试设置签到方法是这样

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


public async Task<IHttpActionResult> Login([FromBody]string email) 
    { 
     var user = await UserManager.FindByNameAsync(email); 
     Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie); 
     var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); 
     AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity); 
     return Ok(); 
    } 
+0

没有帮助。我忘记说我的身份验证是HttpContext.GetOwinContext()。身份验证。改变isPersistent也没有帮助 – user1997649

0

的解决方法是删除下面的代码:

Authentication.SignOut(DefaultAuthenticationTypes.ApplicationCookie);