Pregunta
Me han puesto en práctica se implementan FBA (Reclamación de autenticación basada) en Sharepoint 2010. siguiente.
- Custom Login página
- Custom página de registro
- página de recuperación de contraseña (ForgetPassword.aspx)
En ForgetPassword usuario se le pide página para introducir su dirección de correo electrónico, utilizaron mientras que el inicio de sesión y en el código detrás Estoy usando este correo electrónico para obtener el nombre de usuario utilizando la función Membership.GetUserNameByEmail y luego pasar este nombre de usuario para la función Membership.GetUser para obtener el credencial de usuario que se envía a través del correo.
Pero ahora el código lanza como excepción diciendo "La función no está implementada". Me pregunto; No estoy usando cualquier base de datos personalizada para las que tuve que crear un proveedor personalizado. Entonces ¿por qué estoy recibiendo este error. Déjame saber si alguien tiene alguna idea o problema similar enfrentado. Gracias.
Saludos,
Arroz
Solución
Cuando FBA está configurado para SharePoint 2010, dos proveedores de pertenencia se define en el archivo web.config
- Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider
(generalmente llamado i ) y System.Web.Security.SqlMembershipProvider
(llamado FBAMembership en este caso) . proveedor de pertenencia por defecto debe establecerse en la antigua (es decir SharePoint afirma uno) a fin de que la autenticación de FBA para que funcione correctamente.
Cuando se ejecuta la línea que contiene Membership.GetUserNameByEmail(...)
, el proveedor de pertenencia por defecto se utiliza y como resultado se llama SPClaimsAuthMembershipProvider.GetUserNameByEmail
. MSDN dice que este método está reservado para uso interno y no está destinado a ser utilizado directamente desde el código y de acuerdo con el comentario en el contenido de la comunidad sección arroja NotImplementedException
.
Es necesario para recuperar una instancia del proveedor SqlMembershipProvider
de la colección Membership.Providers
y luego llamar al método GetUserNameByEmail
usando este caso.
Yo uso prefijos al configurar los proveedores en el archivo web.config
y recuperarlos como esto:
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.");