ASP.NET: пользовательский участникProvider с пользовательским пользовательским столом

StackOverflow https://stackoverflow.com/questions/2683562

Вопрос

Я недавно начал 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, чтобы создать пользователь и сохранять данные профиля, но к вашему конечному пользователю это одному атомной работе.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top