2016-12-01 2 views
1

Я пытаюсь создать логин на частичном вид без необходимости обновления всего браузера, когда кто-то входит в.Войти в частичном не работают

Контроллер Логина отлично работает, а также выбирает хорошо парциальной Посмотрите, что это должно быть показано позже. Проблема в том, что этот частичный вид не обнаруживает, что пользователь зарегистрирован.

Если я обновляю сеть (F5), я вижу, что пользователь, как я уже сказал, хорошо зарегистрирован.

Controler:

[AllowAnonymous] 
public ActionResult Login() { 
    return PartialView("_Login"); 
} 

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Login(LoginModel model, string returnUrl) { 
    if(ModelState.IsValid) {    
     if(WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe.Value)) { 
      return PartialView("LogOnPartialView", "Shared");      
     } 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
    } 
    return View(model); 
} 

Частичный вид _login

@using (Ajax.BeginForm("Login", "Account", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "loginControl" })) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-field"> 
     @Html.EditorFor(m => m.UserName) 
     @Html.ValidationMessageFor(m => m.UserName) 
    </div> 

    <div class="form-field"> 
     @Html.EditorFor(m => m.Password) 
     @Html.ValidationMessageFor(m => m.Password) 
    </div> 

     <input type="submit" value="Login" /> 
} 

Частичный вид LogOnPartialView

@if (HttpContext.Current.User.Identity.IsAuthenticated) 
{ 
    <div>user is logged</div> 
} 
else 
{ 
    <div>user is NOT logged</div> 
} 

@if(!Request.IsAuthenticated) 
{ 
    @Html.ActionLink("Registro", "Register", "Account") 
    @: | 
    @Ajax.ActionLink("Login", "Login", "Account", new AjaxOptions { UpdateTargetId = "Login" }) 
} 
else 
{ 
    @: Welcome <b>@User.Identity.Name</b>! 

    @: | 
    @Html.ActionLink("Logout", "LogOff", "Account") 
} 

Может кто-нибудь помочь мне с этим, пожалуйста?

+0

попробовать 'User.Identity.IsAuthenticated' вместо' HttpContext.Current.User.Identity.IsAuthenticated'? –

+0

Оба одинаковые. На всякий случай я пробовал, и он до сих пор не работает. Тай так или иначе. –

+0

Немногие разработчики используют пользовательский 'IdentityPrinciple', так что просто проверяли удачу, если это было в вашем приложении ... это режим формы аутентификации? –

ответ

2

Сомневаюсь, что вы будете работать в текущей форме. Если вы читали the docs говорится

Когда пользователь вошел в систему, ASP.NET устанавливает маркер аутентификации в куки, что позволяет ASP.NET знать на последующих запросах, что пользователь был авторизованы.

Обратите внимание на использование термина «последующие запросы». Проблема с его использованием в том же запросе - это входящий запрос не отправил auth cookie, и поэтому IsAuthenticated является ложным. т.е.

  1. Browser представляет Login
  2. Сервер отвечает Set-Cookie
  3. Браузер отправляет эту куки (аутентификации печенье) по запросу

в рядом Это причина, она работает, когда вы hit F5

Что вы можете сделать, чтобы решить эту проблему, Sult вызова к WebSecurity.Login который указывает авторизовались ли пользователь в успешном и проход это ваш LogOnPartialView

+0

Это решение. Эффективно я могу передать результат вызова 'WebSecurity.Login' и получить значение« true/false »в представлении. Но PartialView все еще не знает имя пользователя, и иногда он не обновляется правильно, поэтому я считаю, что лучшим решением было бы сделать логин обычным способом с полным обновлением страницы. В любом случае, для вашего ответа, я буду отмечать его как действительный. Наслаждайся rep :) –

+0

Через 21 час я дам тебе щедрость. Я не могу раньше. –

+0

@ AlvaroMenéndez вы также можете передать имя пользователя модели просмотра ... однако я не вижу проблем с перезагрузкой страницы ... если вы действительно хотите, чтобы она работала без перезагрузки страницы, ваш просмотр не выглядит слишком сложным ... вы можете просто попросить ваш метод «Логин» обновить соответствующий раздел страницы с помощью javascript (при условии, что это удалось) – wal

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