【问题标题】:Use email address instead of username with ASP.NET Forms authentication在 ASP.NET Forms 身份验证中使用电子邮件地址而不是用户名
【发布时间】:2011-04-28 16:48:06
【问题描述】:

我正在使用内置的“Internet 应用程序”模板启动一个全新的 ASP.NET MVC 应用程序。

如何设置它以允许使用电子邮件地址和密码而不是用户名和密码登录?

【问题讨论】:

    标签: asp.net-mvc asp.net-membership forms-authentication


    【解决方案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; }
    }
    

    在您的 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);
    }
    

    【讨论】:

      【解决方案2】:

      我们有相同的要求并这样做, 您应该创建自定义身份(CustomIdentity : IIdentity, ISerializable)

      [Serializable]
      public class CustomIdentity : IIdentity, ISerializable
      

      并为其定义 Name 属性。

      那么对于name属性的get方法返回用户的email

          public string Name 
          { 
              get{ return Email; }
          }
      

      如果需要详细信息,请在这篇文章中发表评论

      【讨论】:

        【解决方案3】:

        解决方案不就是使用名称字段作为电子邮件地址那么简单吗?

        【讨论】:

        • 是的,我确实想过,但我想继续使用用户名属性在网站中显示他们的名字,例如“欢迎用户名”,而不是“欢迎用户@somewhere.com”。
        • @Matt Frear:您可以为此使用配置文件属性来存储用户的首选名称。见msdn.microsoft.com/en-us/library/d8b58y5d.aspx
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        • 1970-01-01
        • 2013-11-14
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        相关资源
        最近更新 更多