Приложение ASP.Net MVC 3, которое я только начал писать, должно иметь аутентификацию для всех контроллеров, кроме AccountsController
. Вместо того, чтобы украшать все мои контроллеры [Authenticate]
, я написал два пользовательских атрибута. Первое наследуется от AuthorizationAttribute
и проверяет, украшено ли текущее действие другим, AllowAnonymous
. Если это не так, он использует проверку подлинности с помощью форм, чтобы проверить, прошел ли текущий пользователь проверку подлинности, и перенаправляет на страницу входа, если нет.
Чтобы применить это ко всем контроллерам, я добавил свой собственный атрибут авторизации в GlobalFilterCollection
в RegisterGlobalFilters
в global.asax.cs
.
Это все работает в браузере, но я был удивлен, когда запустил тесты по умолчанию, которые поставляются с интернет-приложением MVC, и увидел, что тест HomeControllerTest для домашней страницы прошел, и сказал, что текст "Welcome To ASP.NET MVC" был в ViewBag. Я ожидал, что этот тест не пройдёт, так как при просмотре в браузере это действие перенаправит на страницу входа, если пользователь не вошел в систему.
Мой подход к аутентификации неверен или мне нужно что-то написать в тестах, чтобы применить глобальные фильтры? Проведение юнит-тестов предполагает, что фильтры добавляются, но они не применяются так, как я ожидаю.