1

Sharepoint 2010にFBA(クレームベース認証)を実装しました。以下が実装されています。

  • カスタムログインページ
  • カスタムサインインページ
  • パスワード回復ページ(ForgetPassword.aspx)
    ForgetPasswordページで、ユーザーは自分の電子メールアドレスを入力するように求められます。ユーザーは、サインイン時に使用し、コードビハインドでこの電子メールを使用して、Membership.GetUserNameByEmail関数を使用してユーザー名を取得し、このユーザー名を渡します。 Membership.GetUser関数に移動して、メールで送信されるユーザー資格情報を取得します。

しかし今、コードは「関数が実装されていません」という例外としてスローします。不思議なんだけど; カスタムメンバーシッププロバイダーを作成する必要のあるカスタムデータベースを使用していません。次に、なぜこのエラーが発生するのですか。誰かが手がかりを持っているか、同様の問題に直面している場合は私に知らせてください。ありがとう。
よろしく、水田

4

1 に答える 1

1

web.configFBAがSharePoint2010用に構成されている場合、ファイルには2つのメンバーシッププロバイダーMicrosoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider(通常はiという名前)とSystem.Web.Security.SqlMembershipProvider(この場合はFBAMembershipという名前)が定義されています。FBA認証が正しく機能するには、デフォルトのメンバーシッププロバイダーを前者に設定する必要があります(つまり、SharePointが1つを要求します)。

を含む行Membership.GetUserNameByEmail(...)が実行されると、デフォルトのメンバーシッププロバイダーが使用され、その結果SPClaimsAuthMembershipProvider.GetUserNameByEmailが呼び出されます。MSDNによると、このメソッドは内部使用のために予約されており、コードから直接使用することを意図したものではなく、コミュニティコンテンツセクションのコメントによると、スローされ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.");
于 2011-01-17T21:03:30.833 に答える