Атрибут Authorize иногда не работает в моем проекте - PullRequest
0 голосов
/ 20 мая 2011

Я хочу понять, как исправить поведение, с которым я сталкиваюсь

Я делаю свой логин в коде с FormsAuthentication.SetAuthCookie(user.Login, false); Каждый метод моего контроллера имеет атрибут [Authorize]

Мой web.config:

<authentication mode="Forms">  
  <forms loginUrl="~/Login/Index" timeout="10"/>
</authentication>

Проблема иногда заключается в том, что я не захожу на страницу входа в систему, и атрибут Authorize проходит, поэтому мой метод контроллера завершается сбоем (потому что нет данных сеанса). Чтобы это исправить, я очищаю кеш браузера и перезапускаю браузер только после его работы.

Я думаю, что есть какая-то проблема в моей логике входа? Может кто-нибудь объяснить это и как это сделать правильно.

1 Ответ

2 голосов
/ 20 мая 2011

Проверка подлинности с помощью форм и фильтр авторизации ASP.NET MVC не зависят от состояния сеанса ASP.NET.Таким образом, если метод контроллера завершается сбоем из-за отсутствия данных сеанса, то это связано с вашим кодом, который предполагает такие отношения.См. эту статью , чтобы понять, как Authorize работает с аутентификацией ASP.NET.

Я полагаю, что ваша проблема возникает из-за того, что вы принимаете аутентификацию форм, синонимичную состоянию сеанса.Но вы можете иметь состояние сеанса без аутентификации.Оба используют разные механизмы и имеют разные тайм-ауты.Поэтому, если вы помещаете некоторые данные в состояние сеанса на странице входа в систему, возможно, ваш сеанс истек, но аутентификация остается действительной (и, следовательно, вы не будете перенаправлены на страницу входа).Простым решением может быть синхронизация сеанса и времени ожидания аутентификации, но это не сработает при перезапуске приложения.Наилучшим способом было бы проверить соответствующие данные сеанса и, если они не существуют, либо принудительно выполнить повторный вход в систему, либо использовать информацию о пользователе / ​​личности аутентифицированного пользователя для восстановления данных в сеансе.Я бы предпочел более поздний подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...