Шаблон MVC 4 с настраиваемым поставщиком членства

Что я хочу сделать, так это использовать шаблон MVC 4 по умолчанию, который только что поставляется с Visual Studio 2012, в качестве основы для моего нового проекта. Однако я хочу заменить поставщика SQL на настраиваемый поставщик членства, чтобы я мог получить доступ к своей RavenDB, чтобы получить своих пользователей. Я реализовал пользовательский провайдер, как и раньше, но методы WebSecurity вызывают следующее исключение.

Эта строка кода:

ViewBag.HasLocalPassword = OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(User.Identity.Name));

В частности, метод:

WebSecurity.GetUserId

Выдает это исключение:

You must call the "WebSecurity.InitializeDatabaseConnection" method before you call any other method of the "WebSecurity" class. This call should be placed in an _AppStart.cshtml file in the root of your site.

Теперь я не могу вызвать InitializeDatabaseConnection, потому что мой провайдер не является провайдером SQL. Этот метод ожидает поставщика SQL и строку подключения SQL. Это распространенная проблема или я что-то упускаю? Почему WebSecurity необходимо инициализировать и почему ожидается, что он будет подключаться только с использованием поставщика SQL?

Мне придется просто изменить код, чтобы не использовать класс WebSecurity?

Я был в этом весь день, и я очень устал. Надеюсь, я не упустил из виду что-то простое. Может быть, еще один ром с колой поможет...

Обновление :19.08.2012

Я декомпилировал метод GetUserId и обнаружил, что единственная причина, по которой он не работает, связана с вызовом VerifyProvider.

public static int GetUserId(string userName)
{
    WebSecurity.VerifyProvider();
    MembershipUser user = Membership.GetUser(userName);
    if (user == null)
        return -1;
    else
        return (int) user.ProviderUserKey;
}

private static ExtendedMembershipProvider VerifyProvider()
{
    ExtendedMembershipProvider membershipProvider = Membership.Provider as ExtendedMembershipProvider;

    if (membershipProvider == null)
        throw new InvalidOperationException(WebDataResources.Security_NoExtendedMembershipProvider);

    membershipProvider.VerifyInitialized();
    return membershipProvider;
}

Теперь единственная причина, по которой он не работает в методе VerifyProvider, связана с вызовом VerifyInitialized, который я не могу переопределить в своем поставщике членства. Кроме того, если он не звонит моему провайдеру, я не уверен, какой код вызывается при обработке VerifyInitialized.

internal virtual void VerifyInitialized()
{
}

Я удаляю всех других поставщиков членства в Web.Config. По крайней мере, я так думаю. Вот вход.

<membership defaultProvider="RavenMembershipProvider">
    <providers>
        <clear />
        <add name="RavenMembershipProvider" type="BigGunsGym.Infrastructure.Providers.RavenMembershipProvider" />
    </providers>
</membership>
5
задан Bobby Cannon 19 August 2012 в 16:17
поделиться