Как реализовать поставщика членства ASP.NET в моей модели домена
-
03-07-2019 - |
Вопрос
На веб-сайте мне нужно интегрировать членство и аутентификацию.Итак, я хочу использовать функциональность членства в ASP.NET, но у меня есть другие пользовательские вещи, которые должен делать «пользователь».
Итак, я сижу здесь с карандашом и бумагой и рисую линии для своей доменной модели...И как мне лучше всего использовать членство в ASP.Net и расширить его для удовлетворения своих потребностей?
Должен ли я создать класс, который наследуется от MembershipUser, и расширить его своими собственными свойствами и методами (и сохранить это в отдельной таблице).Или мне следует разрешить MembershipUser быть свойством моего пользовательского объекта User/Client?
Что было бы хорошим и надежным способом сделать это?
Решение
Я подумал об этом, и есть 2 способа, которые кажутся подходящими (конечно, есть и другие способы заставить его работать).
Провайдер пользовательского членства
Вы изменяете провайдера членства на собственный и используете свой объект User для хранения всей информации.
Проблема с этим в том, что он включает в себя много повторной реализации вещей, которые уже хорошо обрабатываются Asp.Net. Хорошо, что у вас есть один объект User со всеми деталями.
Ссылка от пользователя членства на вашего пользователя
При использовании этого метода вы будете использовать исходный поставщик Membership для обработки имени пользователя и пароля, но вы свяжете свой собственный объект User с этим объектом, например, с именем пользователя, используя службу.
Это действительно легко настроить, вам просто нужно создать сервис, который будет использоваться следующим образом:
string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);
Другие советы
Я закончил тем, что написал своего собственного участника-провайдера, и реализовал это в 3 отдельных решениях. Это чрезвычайно просто и намного, намного элегантнее, чем связать пользователя с membersUser (который я тоже пробовал).
Прочитайте это ...
Создать пользовательский поставщик членства для безопасности веб-сайта ASP.NET а> р>
А если вы хотите узнать больше, посмотрите это видео (с исходным кодом) а>. р>
Я расширил MembershipUser и создал свою собственную версию SqlMembershipProvider для сопоставления с моим существующим доменом, и она работает хорошо, сейчас находится в производстве.
MembershipUser — это, по сути, просмотр моей таблицы пользователей.Мой расширенный класс MembershipUser включает свойства стиля профиля/учетной записи вместо использования системы SqlProfileProvider по умолчанию, которая немного хрупка.
Я не смог использовать существующие таблицы членства или процедуры, но написал свои собственные.Например, SqlMembershipProvider использует GUID в качестве непрозрачного ключа, но производственная система использует старый добрый int.Все даты указаны по всемирному координированному времени и т. д.слишком.
Доступ ко всем дополнительным функциям пользователя осуществляется через домен пользователя, а не через методы членства.
ХТХ.
В настоящее время я работаю через API-интерфейс членства в Microsoft ASP.NET 2.0 Расширенная статья из журнала CoDe Magazine, в которой объясняется, как расширить API членства, написав оболочку для существующих классов. Основным преимуществом является то, что вы можете сохранить все готовые функциональные возможности и вам не придется переписывать свои собственные, как это было бы при реализации пользовательского поставщика. Исходный код предоставляется.