Вопрос

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

  • Пользовательская страница входа в систему
  • Пользовательская страница входа
  • Страница восстановления пароля (foreverpassword.aspx)
    В пользователе страницы FargetPassword пользователя просят ввести свой адрес электронной почты, они использовали во время входа, а в коде я использую это электронное письмо, чтобы получить имя пользователя с помощью функции kenship.getUserNameByemail, а затем передаю это имя пользователя членству.getUser, чтобы получить функцию Учетные данные пользователя будут отправлены по почте.

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

Это было полезно?

Решение

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

Когда линия, содержащая 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