1

我目前有以下登录脚本:

[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 请求将被验证,那么当用户登录时将用户数据保存到会话中的最佳方法是什么?在用户的会话到期并将他踢出之前,是否会确保在会话中,或者是否会出现用户在没有会话数据集的情况下登录的情况?如果生病了,也需要一些东西来处理它。

4

1 回答 1

0

LoginButton_Clicked这在asp.net application(非 MVC)中发生在我身上。即使认为这个事件(LoginButton_Clicked)在成功登录后触发 Membership.GetUser(), Roles.GetRolesForUser(), Profile 都还没有填写。因此需要将用户名传递给每个方法以获取详细信息。

我认为同样的事情也发生在 MVC 中。

您可以通过传递 model.UserName 来获取用户详细信息,如下所示。

MembershipUser mu = Membership.GetUser(model.UserName);
于 2012-10-12T17:46:14.257 回答