Регистрация пользователя Asp.net MVC3

Я учу себя Asp .net MVC 3. Я достиг стадии, когда мне нужно теперь включить систему учетных записей пользователей. Я начал со стандартного поставщика членства Asp .net MVC 3 и хочу придерживаться его по большей части и хранить все остальные данные пользователя в другой таблице, связанной с таблицей пользователей.

Тем не менее, я хотел бы добавить две функции во время регистрации: 1) Электронное письмо с подтверждением 2) Принять Условия.

Есть ли простой способ сделать это без создания собственного поставщика членства?


person Tripping    schedule 07.07.2012    source источник


Ответы (2)


Лично я не считаю, что электронные письма/условия подтверждения должны быть частью поставщика членства.

Обычно вы будете иметь дело с подобными вещами в своем AccountController (или в любом другом эквиваленте).

Например, если у вас есть действие «Регистрация», после того, как вы использовали поставщика членства для сохранения пользователя, и все выглядит хорошо, вы затем отправляете электронное письмо с подтверждением (код запускается из действия)

person Kenneth Ito    schedule 07.07.2012

Вы можете добавить условия принятия в класс RegisterModel в модели учетной записи (AccountModels.cs в каталоге Models), например:

[Display(Name = "Agree to Terms")]
public bool AgreeTandC { get; set; }

Вы должны обновить представление регистрации, добавив для этого отображение, чтобы отображался флажок и любой текст, который вы хотите с ним.

К сожалению, вы не можете просто использовать атрибут [Required], так как это bool, а отсутствие проверки является ложным, а не нулевым. Есть способы создать настраиваемый атрибут bool required, но они немного трудоемки. Возможно, вам будет проще добавить проверку в методе регистрации в контроллере учетных записей, чтобы увидеть, отмечен ли он, например, так:

if(model.AgreeTandC == false)
{
    ModelState.AddModelError("AgreeTandC", "You must agree to the Terms and Conditions");
    return View(model);
}

Я не использовал ModelState.AddModelError раньше, но я думаю, что это сработает (отобразит ошибку пользователю), в противном случае просто замените его на ViewBag.Error = "You must agree to the Terms and Conditions"; и добавьте это в модель представления регистра.

Что касается электронной почты, это не сложно, вам нужно добавить возможность отправки электронной почты что-то вроде MvcMailer. Вам также необходимо изменить строку Membership.CreateUser в методе Register контроллера учетных записей, чтобы не авторизовать пользователя.

Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, false, null, out createStatus);

Я думаю, так и должно быть. Затем, если createStatus == MembershipCreateStatus.Success) отправить электронное письмо с GUID подтверждения string confirmationGuid = user.ProviderUserKey.ToString();

Вам также нужно будет создать метод для принятия идентификатора подтверждения (когда они нажимают ссылку в своем электронном письме).

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

person Garrett Fogerlie    schedule 07.07.2012