Вопрос
Я внедрил 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.");