【发布时间】:2011-04-28 16:48:06
【问题描述】:
我正在使用内置的“Internet 应用程序”模板启动一个全新的 ASP.NET MVC 应用程序。
如何设置它以允许使用电子邮件地址和密码而不是用户名和密码登录?
【问题讨论】:
标签: asp.net-mvc asp.net-membership forms-authentication
我正在使用内置的“Internet 应用程序”模板启动一个全新的 ASP.NET MVC 应用程序。
如何设置它以允许使用电子邮件地址和密码而不是用户名和密码登录?
【问题讨论】:
标签: asp.net-mvc asp.net-membership forms-authentication
如果您使用默认的AccountModels,不妨将LogOnModel 更改为删除UserName 并添加Email,如下所示:
public class LogOnModel {
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email address")]
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; }
}
在您的 LogOn 视图中也将出现的 UserName 更改为 Email。
最后在您的AccountController 中,更改LogOn 操作以从电子邮件地址获取UserName 以完成SignIn 过程,如下所示:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl) {
if (ModelState.IsValid) {
var userName = Membership.GetUserNameByEmail(model.Email);
if (MembershipService.ValidateUser(userName, model.Password)) {
FormsService.SignIn(userName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl)) {
return Redirect(returnUrl);
} else {
return RedirectToAction("Index", "Home");
}
} else {
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
【讨论】:
我们有相同的要求并这样做, 您应该创建自定义身份(CustomIdentity : IIdentity, ISerializable)
[Serializable]
public class CustomIdentity : IIdentity, ISerializable
并为其定义 Name 属性。
那么对于name属性的get方法返回用户的email
public string Name
{
get{ return Email; }
}
如果需要详细信息,请在这篇文章中发表评论
【讨论】:
解决方案不就是使用名称字段作为电子邮件地址那么简单吗?
【讨论】: