为什么在Membership.ValidateUser返回true后User.Identity为null?

时间:2014-05-27 18:32:33

标签: asp.net-mvc membership-provider asp.net-mvc-5.1

不幸的是,我必须在MVC5时代处理MembershipProvider。但是这个问题让我困惑。

在我的MVC应用程序中,登录视图将用户名和密码发布回登录控制器。

    [HttpPost]
    public ActionResult Login(LoginInputModel model)
    {   
        var isValid = Membership.ValidateUser(model.Username, model.Password);
        var user = Membership.GetUser(model.Username);
        var isAuthenticated = User.Identity.IsAuthenticated;
        var username = User.Identity.Name;
        ...
    }

走进控制器,我找到了

  • isValidtrue,这很好。
  • user也会返回正确的信息。

但是

  • isAuthenticatedfalse
  • User.Identity仍为null

我一直认为Membership.ValidateUser()会使用正确的信息填充User.Identity`。现在看来有些东西不见了。谁能告诉我出了什么问题?

感谢。

2 个答案:

答案 0 :(得分:0)

在下一个请求之前,不会填充User对象。用户是HttpContext的一部分,尚未更新。

看到您没有使用WebSecurity(这里很不错),您必须在验证后设置auth cookie。

if(Membership.ValidateUser(model.Username, model.Password))
{
     FormsAuthentication.SetAuthCookie(user.UserName, true);
     //Any other logic you need to perform
} 
else
{
     //Handle invalid login details
}

答案 1 :(得分:0)

这是我的临时解决方法:

灵感来自here

我补充说:

if (user != null) FormsAuthentication.SetAuthCookie(user.UserName, true);

似乎工作正常。但我不确定这是否正确。