我目前有以下登录脚本:
[HttpPost]
public ActionResult LogOn(LogOnModel model)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
Guid MyUserId = (Guid)Membership.GetUser().ProviderUserKey;
System.Web.HttpContext.Current.Session[MyUserId.ToString()] = profileRepository.GetFullProfile(MyUserId);
return Json(true);
}
else
{
return Json("The user name or password provided is incorrect.");
}
}else
return Json("The user name or password provided is incorrect.");
}
我在Membership.GetUser()
上收到object reference
错误的错误消息。我对此进行了研究,发现只是因为我的下一个http请求才会被验证,那么在用户登录时将用户数据保存到会话中的最佳方法是什么?是否会确保在会话期间直到用户会话到期并将其踢出或者是否会有用户登录而没有会话数据集的实例?如果这样生病也需要处理它的东西。
答案 0 :(得分:0)
在LoginButton_Clicked
(非MVC)的asp.net application
中发生了这种情况。甚至认为此事件(LoginButton_Clicked
)在成功登录后会触发Membership.GetUser(),Roles.GetRolesForUser(),Profile尚未填写。因此,需要将用户名传递到每个方法以获取详细信息。
我认为同样的事情也发生在MVC中。
您可以通过传递model.UserName来获取用户详细信息,如下所示。
MembershipUser mu = Membership.GetUser(model.UserName);