关于Sharepoint 2010的FBA

时间:2011-01-17 13:09:54

标签: sharepoint fba

我已在Sharepoint 2010上实施了FBA(基于声明的身份验证)。以下内容已实施。

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

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

1 个答案:

答案 0 :(得分:1)

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

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

您需要从SqlMembershipProvider集合中检索Membership.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.");