MVC 4 modèle avec le fournisseur d'appartenances personnalisé

Ce que je suis désireux de faire est d'utiliser la valeur par défaut MVC 4 modèle qui vient fourni avec Visual Studio 2012 en tant que base pour mon nouveau projet. Cependant je veux remplacer le fournisseur SQL avec le fournisseur d'appartenances personnalisé afin que je puisse accéder à mon RavenDB pour obtenir mes utilisateurs. J'ai mis en place le fournisseur personnalisé comme je l'ai avant, mais l'WebSecurity méthodes sont à jeter l'exception suivante.

Cette ligne de code:

ViewBag.HasLocalPassword =
OAuthWebSecurity.HasLocalAccount(WebSecurity.GetUserId(De L'Utilisateur.L'identité.Nom));

Spécifiquement de la méthode:

WebSecurity.GetUserId

Est de lancer cette exception:

Vous devez appeler la "WebSecurity.InitializeDatabaseConnection" méthode
avant d'appeler une autre méthode de la "WebSecurity" de la classe. Cet appel
doit être placé dans un _AppStart.cshtml fichier dans la racine de votre site.

Maintenant je ne peux pas appeler InitializeDatabaseConnection parce que mon fournisseur n'est pas un fournisseur SQL. Cette méthode attend un fournisseur SQL et une chaîne de connexion SQL. Est-ce un problème commun ou ai-je raté quelque chose? Pourquoi ne WebSecurity être initialisé et pourquoi faut-il s'attendre à être connecté à l'aide d'un fournisseur SQL?

Suis-je viens de changer le code pour ne pas utiliser le WebSecurity classe?

J'ai été à ce jour et je suis assez fatigué. J'espère que je n'ai pas négligé quelque chose de simple. Peut-être un plus de rhum et coke...

Mise à jour: 08/19/2012

J'ai décompilé le GetUserId méthode et trouve la seule raison, c'est de ne pas en raison de la VerifyProvider appel.

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;
}

Maintenant la seule raison qu'il ne fonctionne pas dans le VerifyProvider méthode est la raison de l'appel à VerifyInitialized que je ne peux pas remplacer dans mon abonnement fournisseur. Aussi, si ce n'est pas l'appel de mon fournisseur puis je ne suis pas sûr de ce code est appelé lorsque VerifyInitialized est traitée.

internal virtual void VerifyInitialized()
{
}

Je suis en enlevant tous les autres fournisseurs d'appartenance dans le Web.Config. Au moins, je pense que je suis. Voici l'entrée.

<membership defaultProvider="RavenMembershipProvider">
    <providers>
        <clear />
        <add name="RavenMembershipProvider" type="BigGunsGym.Infrastructure.Providers.RavenMembershipProvider" />
    </providers>
</membership>

OriginalL'auteur Bobby Cannon | 2012-08-19