+ 1 к Sparkle, так как похоже, что это будет работать, но я нашел более простой способ.
В AccountModel.cs изменить атрибут отображения (просто метка текстового поля на странице входа в систему)
public class LogOnModel
{
[Required]
[Display(Name = "User name or Email Address")]
public string UserName { get; set; }
...
В AccountController.cs измените метод LogOn, чтобы увидеть, выглядит ли имя пользователя как адрес электронной почты, если так, то попробуйте найти имя пользователя по адресу электронной почты.
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
// Can login by username or email address
MembershipUser user = null;
string userName;
if (model.UserName.Contains("@"))
{
// Could change model.userName from email to username but this will change form values
// if login fails (wrong pwd) which will be confusing to users, so keep in sep username string
userName = Membership.GetUserNameByEmail(model.UserName);
if (!String.IsNullOrEmpty(userName))
{
user = Membership.GetUser(userName);
}
}
else
{
user = Membership.GetUser(model.UserName);
userName = model.UserName;
}
if (user != null && validateAndLogOnUser(userName, model.Password, model.RememberMe))
{
// Rest of standard login code here