2013-07-19 4 views
1

Когда пользователь нажимает кнопку Вход следующая функция контроллера выполняет, в котором я установить имя пользователя с помощью SetAuthCookie:MVC3 @ Context.User.Identity.Name пустое значение

// 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 всегда имеет пустую стоимость. Любое решение?

+0

Какое разрешение вы используете? – ssilas777

+0

Я новичок в MVC. Пожалуйста, объясните – Azeem

+0

http://msdn.microsoft.com/en-us/library/aa291347(v=vs.71).aspx, пожалуйста, проверьте это – ssilas777

ответ

1

User.Identity.Name установлен в событии AuthenticateRequest, которое намного раньше, чем когда вызывается действие контроллера. Вызов FormsAuthentication.SetAuthCookieТОЛЬКО добавляет cookie аутентификации в ответ, он не заполняет это значение, поэтому он пуст.

Что вы будет см. То, что User.Identity.Name будет заполнен при следующем запросе на страницу. Обычно на странице, которая делает такую ​​аутентификацию, вы перенаправляете из действия, которое вы отправляете на страницу, требующую аутентификации, запроса POST.

+0

Можете ли вы привести пример, чтобы уточнить свою мысль? спасибо – Azeem

+1

Вместо 'Return View (...);' вы делаете перенаправление: 'Return RedirectToAction (« Index »);« Хорошая практика сделать перенаправление после успешного (= данные действительны, имя пользователя/пароль - действителен) POST. Так что, если пользователь обновит веб-страницу, он не будет случайно делать сообщение снова. – ZippyV

Смежные вопросы