Frage

Ich habe FBA implementiert (Anspruch basierte Authentifizierung) auf Sharepoint 2010. Die folgende umgesetzt werden.

  • Benutzerdefinierte Login-Seite
  • Benutzerdefinierte Anmeldeseite
  • Passwort Recovery-Seite (ForgetPassword.aspx)
    In ForgetPassword Seite Benutzer ihre E-Mail-Adresse einzugeben gefragt werden, verwendete sie während Anmelde- und in Code hinter ich diese E-Mail bin mit dem Usernamen mit der Membership.GetUserNameByEmail Funktion zu erhalten und dann vorbei mit diesen Benutzername Membership.GetUser Funktion die bekommen Benutzeranmeldeinformationen werden per Post senden.

Aber jetzt wirft der Code als Ausnahme sagen: „Die Funktion ist nicht implementiert“. Ich frage mich; Ich verwende keine benutzerdefinierten Datenbank, für die ich eine benutzerdefinierte Membership Provider erstellen musste. Dann, warum ich diese Störung erhalte. Lassen Sie mich wissen, ob jemand eine Ahnung, oder konfrontiert ähnliches Problem hat. Danke.
Grüße, Paddy

War es hilfreich?

Lösung

When FBA is configured for SharePoint 2010, two membership providers are defined in the web.config file - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider (usually named i) and System.Web.Security.SqlMembershipProvider (named FBAMembership in this case). Default membership provider must be set to the former (i.e. SharePoint claims one) in order for FBA authentication to work properly.

When the line containing Membership.GetUserNameByEmail(...) is executed, the default membership provider is used and as a result SPClaimsAuthMembershipProvider.GetUserNameByEmail is called. MSDN says that this method is reserved for internal use and is not intended to be used directly from your code and according to the comment in the Community Content section it throws NotImplementedException.

You need to retrieve an instance of the SqlMembershipProvider provider from the Membership.Providers collection and then call the GetUserNameByEmail method using this instance.


I use prefixes when configuring providers in the web.config file and the retrieve them like this:

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.");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top