FBA на Sharepoint 2010 - PullRequest
       16

FBA на Sharepoint 2010

1 голос
/ 17 января 2011

Я реализовал FBA (проверку подлинности на основе утверждений) на Sharepoint 2010. Следующее выполнено.

  • Пользовательская страница входа
  • Пользовательская страница входа
  • Страница восстановления пароля (ForgetPassword.aspx)
    На странице ForgetPassword пользователю предлагается ввести свой адрес электронной почты.адрес, который они использовали при входе и в коде позади. Я использую это электронное письмо, чтобы получить имя пользователя с помощью функции Membership.GetUserNameByEmail, а затем передать это имя пользователя в функцию Membership.GetUser, чтобы получить учетные данные пользователя для отправки по почте.

Но теперь код выдает исключение, говоря: «Функция не реализована».Мне интересно;Я не использую какую-либо пользовательскую базу данных, для которой мне нужно было создать пользовательский поставщик членства.Тогда почему я получаю эту ошибку.Дайте мне знать, если кто-нибудь имеет какие-либо подсказки или сталкивался с подобной проблемой.Спасибо.
С уважением, Пэдди

1 Ответ

1 голос
/ 18 января 2011

Когда FBA настроен для SharePoint 2010, в файле web.config определяются два поставщика членства - Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider (обычно именуемые i ) и System.Web.Security.SqlMembershipProvider (именуемые FBAMembership в этом случае).Поставщик членства по умолчанию должен быть установлен на прежний (т. Е. SharePoint требует один), чтобы аутентификация FBA работала правильно.

При выполнении строки, содержащей Membership.GetUserNameByEmail(...), используется поставщик членства по умолчанию, и в результатеSPClaimsAuthMembershipProvider.GetUserNameByEmail называется. MSDN говорит, что этот метод зарезервирован для внутреннего использования и не предназначен для использования непосредственно из вашего кода , и согласно комментарию в разделе Содержимое сообщества throws 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.");
...