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

¿Fue útil?

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.");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top