Domanda

Ho implementato FBA (rivendicazione di autenticazione basato) su SharePoint 2010. A seguito di applicazione.

  • pagina personalizzata Accedi
  • Custom pagina di accesso
  • pagina di recupero password (ForgetPassword.aspx)
    In ForgetPassword pagina utente viene richiesto di inserire il proprio indirizzo e-mail, hanno usato mentre di accesso e nel codice dietro sto usando questa email per ottenere il nome utente utilizzando la funzione Membership.GetUserNameByEmail e poi passare questo nome utente per la funzione Membership.GetUser per ottenere il credenziali utente da inviare tramite posta elettronica.

Ma ora il codice lancia come un'eccezione dicendo "La funzione non è implementata". Mi chiedo; Non sto usando qualsiasi database personalizzato per il quale ho dovuto creare un provider personalizzato Membership. Allora perché sto ottenendo questo errore. Fatemi sapere se qualcuno ha qualche indizio o affrontato problema simile. Grazie.
Saluti, Paddy

È stato utile?

Soluzione

Quando FBA è configurato per SharePoint 2010, due provider di appartenenze sono definiti nel file web.config - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider (di solito denominato i ) e System.Web.Security.SqlMembershipProvider (denominato FBAMembership in questo caso) . provider di appartenenze predefinito deve essere impostato al precedente (vale a dire SharePoint sostiene uno) in modo che l'autenticazione FBA per funzionare correttamente.

Quando viene eseguito il contenente Membership.GetUserNameByEmail(...) linea, il provider di appartenenze predefinito viene utilizzato e, di SPClaimsAuthMembershipProvider.GetUserNameByEmail risultato è chiamato. MSDN dice che questo metodo è riservato per uso interno e non è destinato ad essere utilizzato direttamente dal codice e secondo il commento nel contenuto della community sezione getta NotImplementedException.

È necessario recuperare un'istanza del provider SqlMembershipProvider dalla raccolta Membership.Providers e quindi chiamare il metodo GetUserNameByEmail utilizzando questa istanza.


Io uso prefissi durante la configurazione provider nel file web.config e recuperarli in questo modo:

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.");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top