Почему Identity.IsAuthenticated () иногда true, иногда false - PullRequest
1 голос
/ 26 апреля 2011

У меня есть приложение MVC, которое использует службу аутентификации, с методом IsAuthenticated (), который возвращает true / false.

Кажется, он не связан с методом FormsAuthentication.SignOut () или когда ядобавьте новый файл cookie авторизации при входе в систему.

Вход:

HttpContext.Current.Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket))); 

Выход:

 FormsAuthentication.SignOut();

У меня есть собственный атрибут авторизации на контроллере, который вызываетСлужба аутентификации с IsAuthenticated (), но она возвращает неправильное значение.

Кто-нибудь знает, почему следующий код иногда возвращает true или false?

userPrincipal.Identity.IsAuthenticated

Ответы [ 2 ]

2 голосов
/ 26 апреля 2011

IsAuthenticated всегда возвращает false, если вы вызываете его с незащищенной страницы и в веб-конфигурации установили requireSSL = "true", потому что не можете прочитать аутентифицированный cookie.

В других случаях возвращается значение true, если пользователь прошел проверку подлинности, и значение false, если нет. Установите утверждение как этот, чтобы проверить, что вы спрашиваете его с защищенных страниц.

Debug.Assert(HttpContext.Current.Request.IsSecureConnection, "oops, the IsAuthenticated is not working here");

if (HttpContext.Current.User.Identity.IsAuthenticated)
{

}
0 голосов
/ 05 мая 2011

(Скопировано из комментария выше)

Моя служба аутентификации зависит от IPrincipal, который внедряется StructureMap во время запуска.Тем не менее, в этот момент он не будет аутентифицирован.Мне нужно использовать IPrincipal от текущего потока.Это передается в AuthorizeCore (), который вызывается в моем классе CustomAuthorise (наследуется от AuthorizeAttribute)

...