Question

I ont mis en œuvre FBA (Revendication d'authentification sur la base) sur Sharepoint 2010. Ci-après sont mis en oeuvre.

  • page personnalisée Connexion
  • Personnaliser la page de connexion
  • Mot de passe page de récupération (ForgetPassword.aspx)
    Dans ForgetPassword utilisateur page est invité à entrer leur adresse e-mail, ils ont utilisé en connexion et dans le code derrière je suis en utilisant cet e-mail pour obtenir le UserName en utilisant la fonction Membership.GetUserNameByEmail et en faisant passer ce nom d'utilisateur pour la fonction Membership.GetUser pour obtenir la identification d'utilisateur à envoyer par courrier.

Mais le code jette comme exception en disant « La fonction n'est pas ». Je me demande; Je n'utilise une base de données personnalisée pour laquelle je devais créer un fournisseur d'adhésion personnalisée. Alors pourquoi je reçois cette erreur. Permettez-moi de savoir si quelqu'un a une idée ou face problème similaire. Merci.
Cordialement, Paddy

Était-ce utile?

La solution

Lorsque FBA est configuré pour SharePoint 2010, deux fournisseurs d'adhésion sont définis dans le fichier web.config - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider (généralement appelé i ) et System.Web.Security.SqlMembershipProvider (nommé FBAMembership dans ce cas) . fournisseur d'appartenances par défaut doit être réglé sur l'ancien (à savoir SharePoint revendique un) pour que l'authentification FBA fonctionne correctement.

Lorsque la ligne contenant Membership.GetUserNameByEmail(...) est exécutée, le fournisseur d'appartenances par défaut est utilisé et par conséquent SPClaimsAuthMembershipProvider.GetUserNameByEmail est appelé. MSDN dit que cette méthode est réservé à un usage interne et n'est pas destinée à être utilisée directement à partir de votre code et selon le commentaire dans la contenu de la communauté section, il NotImplementedException lancers francs.

Vous devez récupérer une instance du fournisseur de SqlMembershipProvider de la collection Membership.Providers puis appeler la méthode GetUserNameByEmail en utilisant cette instance.


J'utilise préfixes lors de la configuration des fournisseurs dans le fichier web.config et les récupérer comme ceci:

string applicationNamePrefix = "fbaProvider_";
MembershipProvider fbaProvider;

foreach (MembershipProvider provider in Membership.Providers)
{
    if (provider.ApplicationName.StartsWith(applicationNamePrefix, StringComparison.InvariantCultureIgnoreCase))
    {
        fbaProvider = provider;
    }
}

throw new InvalidOperationException("Appropriate provider was not found.");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top