2013-05-09 1 views
3

ВойтиHttpContext.User.Identity.IsAuthenticated никогда верно

[HttpPost] 
public ActionResult Login(LoginModel loginModel) 
{ 
    if (ModelState.IsValid) 
    { 
     using (var _Db = new AccountContext()) 
     { 
      var _UserAccount = _Db.UserAccounts.FirstOrDefault(u => u.Username == loginModel.Username && u.Password == loginModel.Password); 

      if (_UserAccount == null) 
      { 
       ModelState.AddModelError("", "Account doesn't exist!"); 
      } 
      else 
      { 
       FormsAuthentication.SetAuthCookie(loginModel.Username, false); 
      } 
     } 
    } 
    return RedirectToAction("Index", "Home"); 
} 

Redirect или вид дисплея

public ActionResult Index() 
{ 
    if (HttpContext.User.Identity.IsAuthenticated) 
    { 
     return View("Index"); 
    } 
    else 
    { 
     return RedirectToAction("LoginPage"); 
    } 
} 

Я прошел через код и может увидеть SetAuthCookie быть вызвана с правильное имя пользователя. FormsAuthentication.SetAuthCookie(loginModel.Username, false);

Что может помешать пользователю пройти аутентификацию?

ответ

7

Что может помешать пользователю пройти аутентификацию?

Одна из возможных причин, если вы забыли включить проверку подлинности форм в вашем web.config:

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    ... 
</system.web> 

Вы также можете проверять ли куки проверки подлинности форм испускаются в вашем браузере после вызова Метод SetAuthCookie. По умолчанию этот файл cookie будет называться .ASPXAUTH. Если такой файл cookie присутствует и билет еще не истек, метод HttpContext.User.Identity.IsAuthenticated вернет true.

+1

Куки были отправлены, я добавил запись в веб-конфигурацию, и теперь она работает. Благодаря! – Jack

+0

Привет! Я знаю, что это старый пост, но у меня такая же проблема, и cookie .ASPXAUTH не испускается. Вместо этого у меня есть одно имя ASP.NET_SessionId. В чем может быть проблема? Может быть, я запускаю его под Mono-MonoDevelop? – cnom

0

Вы должны подтвердить подлинность пользователя первых:

WebSecurity.Login(loginModel.UserName, loginModel.Password); 

Только после этого вы можете установить куки аутентификации.

+0

У меня нет доступа к WebSecurity, есть ли ссылка, которую мне нужно добавить? – Jack

+0

На самом деле, вы используете SimpleMembership? Похоже, вы используете самодельную систему, верно? – Kenneth

+0

Я не использую SimpleMembership, но я это рассматривал. – Jack

4

У меня была эта же проблема, которая продолжалась даже после добавления тега <authentication mode="Forms"> в мой файл web.config. Как я был там, я заметил:

<system.webServer> <modules> <remove name="FormsAuthentication" /> </modules> </system.webServer>

я сослался на другой проект файла web.config MVC и увидел разницу:

<system.webServer> <modules> <remove name="FormsAuthenticationModule" /> </modules> </system.webServer>

Я изменил значение на <remove name="FormsAuthenticationModule" /> и вуаля! - Он работает сейчас. Извините, я не понимаю, почему, или что там происходит, но я надеюсь, что это может помочь кому-то другому.

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