1

我在 Sharepoint 2010 上实现了 FBA(基于声明的身份验证)。以下是实现的。

  • 自定义登录页面
  • 自定义登录页面
  • 密码恢复页面 (ForgetPassword.aspx)
    在 ForgetPassword 页面中,要求用户输入他们的电子邮件地址,他们在登录时使用,并且在后面的代码中我使用此电子邮件通过 Membership.GetUserNameByEmail 函数获取用户名,然后传递此用户名到 Membership.GetUser 函数以获取要通过邮件发送的用户凭据。

但是现在代码抛出异常,说“函数未实现”。我想知道; 我没有使用任何我必须为其创建自定义成员资格提供程序的自定义数据库。那为什么我会收到这个错误。让我知道是否有人有任何线索或遇到类似问题。谢谢。
问候, 稻田

4

1 回答 1

1

为 SharePoint 2010 配置 FBA 时,文件中定义了两个成员资格提供程序web.config- Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider(通常名为i)和System.Web.Security.SqlMembershipProvider(在本例中名为FBAMembership)。默认成员资格提供程序必须设置为前者(即 SharePoint 声明之一),FBA 身份验证才能正常工作。

执行包含的行时Membership.GetUserNameByEmail(...),将使用默认的成员资格提供程序并因此SPClaimsAuthMembershipProvider.GetUserNameByEmail被调用。MSDN表示,此方法保留供内部使用,不打算直接从您的代码中使用,并且根据它抛出的社区内容NotImplementedException部分中的注释。

您需要SqlMembershipProviderMembership.Providers集合中检索提供者的一个实例,然后GetUserNameByEmail使用该实例调用该方法。


我在文件中配置提供程序时使用前缀,web.config并像这样检索它们:

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.");
于 2011-01-17T21:03:30.833 回答