【问题标题】:FBA on Sharepoint 2010Sharepoint 2010 上的 FBA
【发布时间】:2011-01-17 13:09:53
【问题描述】:

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

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

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

【问题讨论】:

  • 它们存储在创建的常规 sql 数据库中。虽然密码存储为散列,但我能够成功登录。问题是当我尝试使用用户“string textUserName = Membership.GetUserNameByEmail(txtemailid.Text);”输入的电子邮件地址获取用户名时它会引发错误,我在上面已经提到过。谢谢 Paddy
  • 我没有创建任何自定义会员提供程序。我已将“System.Web.Security”包含在使用中,并且在页面加载时我正在检查所有这些参数,如果用户提供了正确的电子邮件 ID,我想重置密码并使用 MembershipUser.ResetPassword() 将其发送给用户。我希望我正确理解了你的问题。谢谢帕迪

标签: sharepoint fba


【解决方案1】:

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

当执行包含Membership.GetUserNameByEmail(...) 的行时,会使用默认的成员资格提供程序,结果会调用SPClaimsAuthMembershipProvider.GetUserNameByEmailMSDN 表示此方法保留供内部使用,不打算直接从您的代码中使用,根据 社区内容 部分中的注释,它会抛出 @ 987654327@.

您需要从Membership.Providers 集合中检索SqlMembershipProvider 提供程序的实例,然后使用该实例调用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.");

【讨论】:

  • 嗨 Marek,你有任何支持上述最后一段的示例代码
  • @Paddy 我更新了答案 - 如果您需要,请告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2012-10-09
  • 1970-01-01
相关资源
最近更新 更多