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

これは(MVCではない)LoginButton_Clickedで私に起こりました。asp.net applicationこのイベント ( LoginButton_Clicked) は、ログインが成功した後に発生しますが、Membership.GetUser()、Roles.GetRolesForUser()、プロファイルはまだ入力されています。したがって、詳細を取得するには、各メソッドにユーザー名を渡す必要があります。

MVCでも同じことが起こっていると思います。

次のように model.UserName を渡すことで、ユーザーの詳細を取得できます。

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