AspNet Identity 2.0电子邮件和用户名重复

我目前的Asp.Net MVC 5项目要求用户名的电子邮件地址。 现在我想升级ASPNet Identity v1.0到v2.0以利用它的所有新功能(请看这里)。

但是,ASPNet Identity v2.0将Email作为单独列添加到Users表中,并将相应的属性添加到IdentityUser类。

我不想将用户名复制到这个新的电子邮件列中。 如何映射IdentityUser的这个Email属性以使用现有的UserName列和属性? 是否可以忽略此电子邮件属性并跳过在用户表中添加列? 有人试过这个吗?

请分享。

更新

这是身份2.0限制。 我们不能忽略电子邮件属性或将其保留为空。 某些身份功能不起作用。 :(


您可以尝试以下其中一种方法:

  • 尝试通过覆盖User类中的Email属性并取消映射或使用流畅API来忽略它。

    public class ApplicationUser : IdentityUser
    {
      // ....
    
      [NotMapped]
      public override string Email { get; set; }
    }
    

    要么

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ApplicationUser>().Ignore(u => u.Email);
    }
    
  • 当你注册你的用户时,只要确保你用你的UserName填写Email

    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            // ...
        }
    }
    
  • 当然,如果你不打算使用它,你总是可以忽略Email列,因为它允许NULL,它只是坐在你的AspNetUsers表中,有一堆NULL,不是最好的方法,但要记住,忽略它可能会失去ASP.NET Identity 2可能提供的可能需要使用的新功能。

    注意但是我不确定1号选项是否适用于Email属性,因为它可能在全新的标识码中使用。 值得一试虽然。 我知道,如果你不需要他们,你就可以摆脱其他专栏。 我个人碰巧使用新的Email属性/列,所以我没有尝试过。

    不知道它是否对你有帮助,但是为了以防万一,我想分享它。


    我遇到同样的问题,并且我解决这个问题的方式是在创建用户时电子邮件地址与用户名相同:

    var newUser = new ApplicationUser()
    {
        UserName = email,
        Email = email,
    };
    

    但是,如果您尝试使用重复的用户名创建帐户,则会收到2个验证错误,一个用于用户名字段,另一个用于电子邮件地址。

    为了解决这个问题,通过编辑identityconfig.cs文件,允许电子邮件地址不是唯一的(它们仍然是唯一的,尽管你的用户名是唯一的):

    manager.UserValidator = new UserValidator<ApplicationUser>(manager)
                {
                    AllowOnlyAlphanumericUserNames = false,
                    RequireUniqueEmail = false
                };
    
    链接地址: http://www.djcxy.com/p/78573.html

    上一篇: AspNet Identity 2.0 Email and UserName duplication

    下一篇: Check if MySQL Table is empty: COUNT(*) is zero vs. LIMIT(0,1) has a result?