質問

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

  • カスタムログインページ
  • カスタムサインインページ
  • パスワードリカバリページ(Porterpassword.aspx)
    forgatePasswordページでは、ユーザーはメールアドレスを入力するように求められます。サインイン中に使用し、背後にあるコードでこのメールを使用してメンバーシップを使用してユーザー名を取得し、このユーザー名をメンバーシップに渡してgetuser関数に渡します。メールで送信されるユーザーの資格情報。

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

役に立ちましたか?

解決

FBAがSharePoint 2010用に構成されている場合、2つのメンバーシッププロバイダーがで定義されています web.config ファイル - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider (通常は名前が付けられています ) と 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.");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top