asp.net-mvc-3 - 允许使用用户名或电子邮件地址登录

标签 asp.net-mvc-3

如何修改标准的 ASP.NET MVC 登录页面以允许用户使用电子邮件地址或用户名登录?

最佳答案

+1 到 Sparkle,因为它看起来可行,但我找到了更简单的方法。

在 AccountModel.cs 中更改 Display 属性(只是登录页面上文本框的标签)

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

关于asp.net-mvc-3 - 允许使用用户名或电子邮件地址登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7653902/

相关文章:

jquery - 完整日历 + 事件 + 事件 Drop + Ajax - 不发送日期值

asp.net-mvc-3 - 更改 ASP.NET MVC 路由中的 Controller 和操作名称

javascript - 我可以在 asp.net-mvc 3 中的 @Ajax.Actionlink 中传递 Javascript 变量吗?

asp.net-mvc - 在 ASP.NET MVC3 中将复杂对象作为参数发送到 Post Action

c# - 使用 $.ajax 同时运行多个 WebRequest

c# - 最安全的实时数据传输建议

asp.net-mvc-3 - MVC 删除记录,但如何在 Controller 中对此进行编码

c# - 如何在 ASP.Net MVC3 C#4 中延迟 Controller 操作结果

c# - 通过 WebClient 请求 JSON 返回 URL 抛出异常

c# - MVC 3 复选框关闭不使用RequiredAttribute 的验证