Простое членство MVC4 Когда происходит автоматический вход в систему?

У меня есть приложение, использующее поставщика простого членства MVC4. Я добавил некоторый код в метод входа в систему, который устанавливает некоторую информацию о сеансе, необходимую мне для решения некоторых вопросов безопасности.

Если я закрою браузер и вернусь к нему, MVC по-прежнему показывает, что я вошел в систему в верхнем левом углу, а свойства User.Username по-прежнему заполнены, но дополнительные данные, которые я туда добавляю, очевидно, нет.

Когда и где происходит эта «аутентификация»? Я попытался проверить объекты запроса и пользователя в Application_Start в Global.asax, но при запуске они все еще равны нулю.

Есть ли что-то еще в этом конвейере аутентификации, что я могу переопределить или вызвать свой метод, чтобы извлечь то, что мне нужно, что было бы более подходящим?

Спасибо!


person bafadam    schedule 13.07.2013    source источник


Ответы (1)


Функциональность «Запомнить меня» не имеет ничего общего с простым членством или каким-либо членством. И при его использовании не происходит фактического «входа в систему». Это постоянный файл cookie, который размещается в системе пользователя, и этот файл cookie считывается при загрузке страницы. Если он содержит правильно зашифрованные данные, то пользователь считается аутентифицированным без повторной проверки членства.

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

Сеанс, вероятно, не следует использовать в любом случае, потому что он плохо масштабируется. Лучшим выбором было бы подключиться к методу OnAuthorization класса Controller и делать там то, что вам нужно, таким образом, это делается при каждом запросе страницы, независимо от того, какой сеанс может быть или не быть.

Другой вариант — создать собственный AuthorizationFilter.

person Erik Funkenbusch    schedule 13.07.2013