Как расширить аутентификацию SimpleMembership в ASP.NET MVC4

Я сделал несколько сайтов ASP.NET MVC 1 и 2. Как-то удалось пропустить v3. Сейчас я создаю новый сайт ASP.NET MVC 4 и вижу, что все элементы членства полностью изменились.

Сначала я был счастлив. Он выглядел простым в настройке и использовании, а шаблон Интернет-проекта поставлялся со всеми классами и представлениями, которые мне понадобились для начала работы.

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

Моя проблема в том, что я не могу найти способ расширить SimpleMembership.

В рамках старой модели поставщика членства я бы попытался наследовать от SqlMembership и переопределить ValidateUser () и вызвать базовый класс или вызвать веб-службу.

Я попытался сделать что-то подобное, создав класс в моем проекте, который наследуется от SimpleMembership, а затем настроил его в качестве поставщика членства по умолчанию в web.config, но это только дало мне ошибку

Parser Error Message: This method cannot be called during the application's pre-start initialization phase.

Line 32:     <membership defaultProvider="ssund">
Line 33:       <providers>
Line 34:         <add name="ssund" type="Ssund.Web.Providers.SsundSimpleMembershipProvider"/>
Line 35:       </providers>
Line 36:     </membership>

person Zack    schedule 28.10.2012    source источник


Ответы (2)


Вы можете продлить SimpleMembershipProvider, но это неприятно из-за необычного и ограничительного способа инициализации провайдеров.

Хотя провайдеры инициализируются через вызов WebSecurity.InitializeDatabaseConnection, установка провайдеров через Web.Config явно так же допустима. Если они расширяются с SimpleMembershipProvider, они будут правильно настроены во время инициализации.

Фактически, вы можете просто реализовать свой собственный ExtendedMembershipProvider для использования с WebSecurity API, а не вызывать WebSecurity.InitializeDatabaseConnection вообще (это только для реализаций на основе SimpleMembershipProvider). Обратной стороной является большая работа по созданию этого с нуля.

Полученная вами ошибка, вероятно, была вызвана взаимодействием с поставщиками на ранней стадии конвейера, возможно, из-за того, что вы что-то делали в Initialize подпрограмме поставщика.

Дополнительную информацию о различиях между SimpleMembershipProvider и MembershipProvider. И взгляните на BetterMembership.Net, чтобы увидеть пример расширения SimpleMembershipProvider.

person TheCodeKing    schedule 03.10.2013

SimpleMembership не настраивается в web.config, это делается в файле InitializeSimpleMembershipAttribute.cs.

К сожалению, реализация используемого класса WebSecurity не может быть расширена, она жестко кодирует использование SimpleMembershipProvider.

Вам не обязательно использовать SimpleMembership. Вы можете вернуться к использованию старой инфраструктуры поставщика членства.

person Erik Funkenbusch    schedule 28.10.2012