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
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.");