Ответ 1
Нет, User
может быть просто ссылкой на анонимного пользователя. Проверьте HttpContext.Current.Request.IsAuthenticated
.
В приложении ASP.NET(2.0) я использую FormsAuthentication.
В методе Global.asax/Application_AuthenticateRequest я проверяю, является ли HttpContext.Current.User нулевым.
Достаточно ли этого, чтобы знать, существует ли файл cookie проверки подлинности форм, срок действия билета не истек, и в целом, что механизм проверки подлинности форм выполнил свою работу для проверки пользователя?
Мне нужно это, потому что у меня есть определенные страницы в этом приложении, для которых иногда не требуется аутентификация (на основе некоторых критериев), и я помещаю их в отдельную директиву "location" в web.config для упорядочения чтобы исключить их из проверки подлинности "поймать все".
т.е. Я пытаюсь проверить Application_AuthenticateRequest, если страница, доступная в этом "местоположении", нуждается в защите или нет, и, если да, знать, был ли пользователь уже аутентифицирован, или мне нужно перенаправить на Logon.
РЕДАКТИРОВАТЬ: Как показывают ответы, скорее всего, я поеду с IsAuthenticated. Для того, чтобы я лучше понял, вот 2 бонусных вопроса:) (пожалуйста, отредактируйте другие ответы, чтобы добавить их, спасибо):
Можно ли предположить, что если IsAuthenticated истинно, то HttpContext.Current.User наверняка будет содержать имя пользователя для аутентифицированного пользователя?
Как я могу закончить с "анонимным пользователем" в HttpContext.Current.User, если принудительно применяется FormsAuthentication, и только несколько страниц исключены с директивой "location"?
Нет, User
может быть просто ссылкой на анонимного пользователя. Проверьте HttpContext.Current.Request.IsAuthenticated
.
Обычно я использую Request.IsAuthenticated. Я не мог сказать вам, должен ли ваш подход работать или нет. Похоже, должно быть, хотя у вас могут быть побочные эффекты, если вы поддерживаете анонимные логины?
Хороший вопрос: в дополнение к ответам, которые дали другие, я бы посоветовал вам взглянуть на эту статью на 4GuysFromRolla сайт.
Как и в стороне, обязательно проверьте, что контекст также не равен нулю (запустите свою работу в httpmodule).