Я разрабатываю приложение начального уровня с ASP.NET MVC 4. Приложение будет иметь систему членства. Я хочу использовать интегрированный SimpleMembershipProvider, потому что создание нового будет для меня сложным. Таким образом, пользователи должны входить в приложение со своими адресами электронной почты, а не с именем пользователя, как в SimpleMembershipProvider. Но я не мог сделать это изменение. Единственный способ сделать это — создать моего собственного провайдера членства?
Как войти в систему с помощью электронной почты вместо имени пользователя в простом членстве ASP.NET MVC 4
Ответы (3)
Используйте электронную почту, чтобы найти идентификатор пользователя. передать этого пользователя в членство и аутентифицировать пользователя с этим.
вы также можете предотвратить дублирование электронных писем во время регистрации пользователя, чтобы убедиться, что 1 электронное письмо возвращает 1 учетную запись. следующий пост поможет в этом senario:
Также вы можете создать уникальный ключ в таблице для электронных писем, чтобы гарантировать отсутствие повторяющихся электронных писем.
В классе AccountModels ( Models.AccountModels ) вам необходимо обновить поле, т.е. ввести свойство электронной почты, как показано ниже.
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
// Make change here
[Required]
[Display(Name = "Your Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
После того, как мы получили электронное письмо, чтобы использовать электронную почту в представлении входа в систему, прежде всего измените класс LoginModel следующим образом:
public class LoginModel
{
[Required]
[Display(Name = "Your Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
И, конечно же, электронная почта будет приниматься от пользователя при регистрации, поэтому внесите изменения в класс RegisterModel следующим образом.
Теперь у вас есть логин и регистрация обновлены. Затем фактические данные, которые в конечном итоге будут храниться в базе данных, определяются в классе UserProfile, поэтому давайте добавим к нему поле электронной почты.
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
}
Теперь вы закончили с обновлением модели. Но теперь это будет работать, потому что, когда вы нажмете «Зарегистрироваться», он фактически добавит имя пользователя и пароль и будет использовать пару для аутентификации. Теперь давайте изменим его. Перейдите к Controllers.AccountController.cs, найдите следующую функцию и обновите ее. WebSecurity.CreateUserAndAccount(model.Email, model.Password); WebSecurity.Login(model.Email, model.Password);
//
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.Email, model.Password);
WebSecurity.Login(model.Email, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
И, наконец, конечно же, измените действие входа в систему следующим образом.
//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.Email, model.Password, persistCookie: model.RememberMe))
{
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The Email or password provided is incorrect.");
return View(model);
}
Это должно позволить вам использовать адрес электронной почты и пароль в качестве пары для входа.
Простой вариант: в файле Models/AccountViewModels.cs вы найдете множество классов, содержащих такое поле:
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
Просто для скорости измените их на:
[Required]
[Display(Name = "Username")]
public string Email { get; set; }
И из вашего кода вы знаете, что поле Email
на самом деле является именем пользователя, поэтому вам не нужно менять его везде.