我正在使用内置的“Internet应用程序”模板启动一个全新的ASP.NET MVC应用程序。
如何设置它以允许使用电子邮件地址&密码而不是用户名&密码?
答案 0 :(得分:1)
如果您使用的是默认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; }
}
同时在UserName
视图中将Email
的出现次数更改为LogOn
。
最后在您的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);
}
答案 1 :(得分:1)
我们有同样的要求并且这样做, 你应该创建自定义标识(CustomIdentity:IIdentity,ISerializable)
[Serializable]
public class CustomIdentity : IIdentity, ISerializable
并为其定义Name属性。
然后获取名称属性的get方法返回用户的电子邮件
public string Name
{
get{ return Email; }
}
如果需要详细信息,请对此帖发表评论
答案 2 :(得分:0)
解决方案不像使用名称字段作为电子邮件地址那么简单吗?