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