不幸的是,我必须在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;
...
}
走进控制器,我找到了
isValid
是true
,这很好。user
也会返回正确的信息。但是
isAuthenticated
是false
User.Identity
仍为null
。我一直认为Membership.ValidateUser()
会使用正确的信息填充User.Identity`。现在看来有些东西不见了。谁能告诉我出了什么问题?
感谢。
答案 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);
似乎工作正常。但我不确定这是否正确。