ASP.NET: пользовательский участникProvider с пользовательским пользовательским столом
-
30-09-2019 - |
Вопрос
Я недавно начал Tinkering с ASP.NET MVC, но этот вопрос должен обратиться в Classic Asp.net. За что это стоит, я очень не знаю о формах аутентификации и провайдеров членства.
Я пытаюсь написать свой собственный MembershipProvider
который будет подключен к моим собственным пользовательским столам в моей базе данных. Моя таблица пользователей содержит все базовые пользовательские данные, такие как имена пользователей, пароли, соли пароля, адреса электронной почты и т. Д., Но также информация, такая как имя, фамилия и страна проживания.
Насколько я понимаю, стандартный способ выполнения этого в ASP.NET - создать таблицу пользователябез Дополнительная информация, а затем таблица «профиль» с дополнительной информацией. Однако это не звучит очень хорошо для меня, потому что, когда мне нужно получить доступ к этой дополнительной информации, мне придется сделать одну дополнительную информацию о базе данных, чтобы получить его.
Я прочитал в книге «Pro Asp.net 3.5 в C # 2008», имеющих отдельную таблицу для профилей, не очень хорошая идея, если вам нужно получить доступ к таблице профиля и иметь много разных страниц на вашем сайте.
Теперь для проблемы под рукой ... Как я уже сказал, я пишу свой собственный заказ MembershipProvider
подкласс, и он идет довольно хорошо, но теперь я пришел, чтобы понять, что CreateUser
Не позволяет мне создавать пользователей в том, как я хотел бы. Способ требует фиксированного числа аргументов и имени, фамилия и страна проживания не являются его частью.
Так как я бы создал запись для нового пользователя в моем пользовательском столе без этой информации под рукой CreateUser
мой MembershipProvider
?
Решение
Я думаю, что вы должны продолжаться с вашим подходом и добавить новую функцию в вашей реализации, я имею в виду, перегружать метод CreateUser и иметь CustomMumbersistUser (который расширяет членство) в качестве параметра. Таким образом, прежде чем использовать провайдера, бросьте его в CustomMbershipProvider и используйте перегруженный метод.
Другие советы
Я согласен с вашим анализом, который вы должны сохранить информацию о членстве и профилях в одной таблице. Поскольку вы верны, что вы ограничены количество параметров, которые требуют CreateUser, вам нужно будет разработать свое поле, чтобы атрибуты профиля без членства нуля. Это не означает, что у вас будут обязательные поля, которые нуль в базе данных, однако. Вместо этого вы можете вы можете ниже фрагмент:
string username = .../ retrieve username here
Membership.CreateUser(username , password, email);
ProfileBase newProfile = Profile.Create(username); //since the user has just been created, all properties will be blank
//set all entered properties
newProfile.SetPropertyValue("MyProp1", myProp1Value);
...
newProfile.SetPropertyValue("MyPropN", myPropNValue);
newProfile.Save();
Таким образом, вы используете провайдеры членства ASP.NET, чтобы создать пользователь и сохранять данные профиля, но к вашему конечному пользователю это одному атомной работе.