1

ユーザーが [サインイン] ボタンを押すと、コントローラーの次の関数が実行され、ユーザーの名前を次のように設定しますSetAuthCookie

// POST: /Account/SignUp
    [HttpPost]
    public ActionResult Index(ConsumerView consumerData)
    {
        try
        {
            ConsumerManager consumerManagerObj = new ConsumerManager();
            if (consumerManagerObj.IsValidUser(consumerData.LoginID, consumerData.Password))
            {
                FormsAuthentication.SetAuthCookie(consumerData.FirstName, false);
                return View ("WelcomeConsumer");
            }
            else
            {
                ModelState.AddModelError("", "Invalid Username/Password!!");
            }

        }
        catch
        {
            return View(consumerData);
        }

        return View(consumerData);
    }

WelcomeConsumerビューにはコードがあります:

@{
ViewBag.Title = "Home";
}

<h2>Welcome</h2>

<h2>Hi <b>@Context.User.Identity.Name</b></h2>
@Html.ActionLink("[Sign Out]", "SignOut", "ConsumerAccount")

<p>
<ul>
    <li>@Html.ActionLink("Book new Ticket", "NewBooking", "ConsumerAccount")</li>
    <li>@Html.ActionLink("View all Bookings", "ViewAllBookings", "ConsumerAccount")    </li>
</ul>
@ViewBag.NewBookingSuccess
</p>

ただし、@Context.User.Identity.Name常に空の値を入れてください。解決策はありますか?

4

1 に答える 1

1

User.Identity.Name はAuthenticateRequest、コントローラー アクションが呼び出されるよりもはるかに早いイベントで設定されます。呼び出すだけで、認証FormsAuthentication.SetAuthCookie Cookieが応答に追加されます。その値は入力されません。そのため、空になっています。

表示されるのは、ページへの次のリクエストで入力されることですUser.Identity.Name通常、このような認証を行っているページでは、POSTリクエストを送信しているアクションから、認証が必要なページにリダイレクトします。

于 2013-07-19T21:12:42.603 に答える