Мне нужно сделать что-то довольно простое: в моем приложении ASP.NET MVC я хочу установить пользовательский IIdentity / IPrincipal. В зависимости от того, что проще / больше подходит. Я хочу расширить значение по умолчанию, чтобы я мог вызвать что-то вроде User.Identity.Id
и User.Identity.Role
. Ничего особенного, только некоторые дополнительные свойства.
Я прочитал тонны статей и вопросов, но чувствую, что делаю это сложнее, чем есть на самом деле. Я думал, что это будет легко. Если пользователь входит в систему, я хочу установить свой IIdentity. Вот я и подумал, я буду внедрять Application_PostAuthenticateRequest
в свой global.asax. Однако это вызывается при каждом запросе, и я не хочу делать вызов базы данных при каждом запросе, который будет запрашивать все данные из базы данных и помещать в пользовательский объект IPrincipal. Это также кажется очень ненужным, медленным и не в том месте (делая там вызовы из базы данных), но я могу ошибаться. Или откуда еще эти данные?
Поэтому я подумал, что всякий раз, когда пользователь входит в систему, я могу добавить в сеанс некоторые необходимые переменные, которые я добавляю в пользовательский IIdentity в Application_PostAuthenticateRequest
обработчике событий. Тем не менее, мой Context.Session
находится null
там, так что это тоже не путь.
Я работаю над этим уже целый день и чувствую, что что-то упустил. Это не должно быть слишком сложно, верно? Я также немного смущен всеми (полу) связанными вещами, которые идут с этим. MembershipProvider
, MembershipUser
, RoleProvider
, ProfileProvider
, IPrincipal
, IIdentity
, FormsAuthentication
.... Am Я единственный, кто находит все это очень запутанным?
Если бы кто-то мог сказать мне простое, элегантное и эффективное решение для хранения некоторых дополнительных данных на IIdentity без всего лишнего запаха ... это было бы здорово! Я знаю, что есть аналогичные вопросы по SO, но, если мне нужен ответ, я должен был упустить это из виду.
MemberShip...
, Principal
, Identity
. ASP.NET должен упростить, упростить и максимально использовать два подхода к аутентификации.