HttpContext.User.Identity.IsAuthenticated never true

Войти

[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");
}

Перенаправление или просмотр

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

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

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

3 ответа

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

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

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

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


У меня была такая же проблема, которая продолжалась даже после добавления тега в мой файл web.config. Когда я был там, я заметил:

        

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

        

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


Сначала необходимо выполнить аутентификацию пользователя:

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

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

licensed under cc by-sa 3.0 with attribution.