Пользовательская аутентификация формы MVC?

Я разработал веб-приложение MVC. Теперь я хочу использовать в нем пользовательскую аутентификацию формы. Для простоты я использую поставщика членства SQL для регистрации. Но я не хочу создавать другую пользовательскую таблицу и сопоставлять с ней таблицу членства, потому что мне просто нужно создать простой модуль, который мне нужно придерживаться таблиц по умолчанию.

Я создал таблицу членства в sql, используя инструмент Aspnet_regsql.

Теперь в AccountModel.cs в класс RegisterModel я добавил еще два поля, например:

public class RegisterModel
{
   [Required]
   [Display(Name = "User name")]
   public string UserName { get; set; }

   [Required]
   [Display(Name = "First name")]
   public string FirstName { get; set; }

   [Required]
   [Display(Name = "Last name")]
   public string LastName { get; set; }
}

Также обновлена ​​таблица dbo.aspnet_Membership и добавлены еще два поля: имя и фамилия.

Теперь внутри контроллеров в коде AccountController.cs:

[HttpPost]
public ActionResult Register(RegisterModel model)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        MembershipCreateStatus createStatus;
        Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus); 
    }
}

Здесь, поскольку CreateUser является методом членства по умолчанию, поэтому я не могу вставить свои настраиваемые поля (имя и фамилия) в таблицу во время создания пользователя?

Как я могу это сделать?


person Neo    schedule 05.01.2012    source источник
comment
ashu не злоупотребляйте маркерами кода. Используйте их только для своего кода. Это затрудняет чтение   -  person Pankaj Upadhyay    schedule 05.01.2012


Ответы (2)


Ашу, прочитав ваши требования, я чувствую, что вам следует написать собственный провайдер для себя, а не придерживаться значения по умолчанию. Причина, по которой я говорю это, заключается в том, что единственный вариант, который у вас есть для достижения ваших требований, — это следовать решению @Mystere Man.

создайте таблицу Users в своем приложении, сделайте ее первичным ключом GUID и добавьте свои настраиваемые поля. Когда вы создаете пользователя, вставьте новую запись в свою таблицу пользователей и используйте ProviderUserKey MembershipUser, возвращенный из CreateUser. Это чрезвычайно просто и не требует возиться с системой членства.

Теперь, если вы собираетесь играть с провайдером членства, почему бы не создать для себя совершенно нового провайдера. Это не так сложно, как думают люди. Все, что вам нужно сделать, это реализовать некоторые абстрактные классы, чтобы иметь соответствующие вещи.

В Интернете доступно множество руководств по созданию пользовательского поставщика членства с нуля, и я перечисляю некоторые из них ниже.

person Pankaj Upadhyay    schedule 05.01.2012

Не расширяйте таблицы членства. Просто не делай этого. Не надо. Я имел в виду это. Не делай этого. Действительно. Я серьезно. Не делай этого.

Вместо этого создайте таблицу Users в своем приложении, сделайте ее первичным ключом GUID и добавьте свои настраиваемые поля. Когда вы создаете пользователя, вставьте новую запись в свою таблицу пользователей и используйте ProviderUserKey MembershipUser, возвращенный из CreateUser. Это чрезвычайно просто и не требует возиться с системой членства.

Я знаю, ты сказал, что не хочешь, но это единственный хороший способ сделать это.

Единственная другая альтернатива — использовать поставщика профилей для сохранения этой информации, однако вы не сможете сопоставить ее ни с чем другим. Поставщик профилей довольно общий, и большинство людей считают его не таким уж полезным.

Если вы измените таблицы членства, вы все сломаете. И, как вы уже выяснили, нет хорошего способа работать с данными без создания собственного настраиваемого поставщика.

person Erik Funkenbusch    schedule 05.01.2012
comment
любая ссылка для вашего решения «создать таблицу пользователей в вашем приложении ...», чтобы я мог правильно следовать? - person Neo; 05.01.2012