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
Vous devez vous connecter pour publier un commentaire.
S'avère que j'ai eu mon fournisseur d'hériter de SimpleMembershipProvider au lieu de ExtendedMembershipProvider. J'ai pensé qu'il serait OK depuis SimpleMembershipProvider hérite ExtendedMembershipProvider mais il ne fonctionne pas.
Après changement de mon fournisseur d'hériter de ExtendedMembershipProvider l'erreur a disparu.
Je suis intéressé aussi
J'ai fini pas à l'aide de RavenDB parce que nous avons commencé d'hébergement dans Azure et à l'aide de SQL. Quand je l'ai fait avoir de travail, j'ai décidé de ne pas mettre en œuvre la MembershipProvider modèle. C'était trop de douleur pour tenter de le faire fonctionner. Nous n'avons pas le temps de se battre.
OriginalL'auteur Bobby Cannon
J'ai également eu le même problème, après la création d'une nouvelle Action pour créer des utilisateurs....
action a été...
mais elle a juste besoin le filtre attrib ajoutant
Le SimpleMembershipInitializer filtre accepte une chaîne de connexion dans le WebSecurity.InitializeDatabaseConnection(), mon problème n'est pas qu'il n'avait pas une chaîne de connexion, mais au lieu de la db n'a pas été initialisé comme l'appel a été effectué pour créer les comptes.. je vais laisser cela ici comme il est peut-être l'aide pour les autres de trouver l'erreur ci-dessus sur Google comme je l'ai fait.
OriginalL'auteur dave heywood