MVC 5播种用户仅适用于电子邮件

时间:2015-03-13 19:06:23

标签: asp.net-mvc asp.net-membership asp.net-mvc-5.2

我正在研究基于MVC5和EF Code First构建的项目。

我有多个上下文,但我在这里想到的是 ApplicationDbContext ,其中包含以下配置代码:

namespace DX.DAL.Migrations.ApplicationDbMigrations
{

    public class Configuration : DbMigrationsConfiguration<ApplicationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            MigrationsDirectory = @"Migrations\ApplicationDbMigrations";
            ContextKey = "DX.DAL.Context.ApplicationDbContext";
        }

        protected override void Seed(ApplicationDbContext context)
        {
            var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
            var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));

            if (!roleManager.RoleExists("Admin"))
            {
                roleManager.Create(new IdentityRole("Admin"));
            }

            var user = new ApplicationUser { UserName = "John", Email = "j.doe@world.com" };


            if (userManager.FindByName("John") != null) return;

            var result = userManager.Create(user, "Password123@");

            if (result.Succeeded)
            {
                userManager.AddToRole(user.Id, "Admin");
            }
        }
    }
}

当我尝试使用上面播种的电子邮件和密码登录时,我收到错误:

  

登录尝试无效

我编写了以下SQL查询:

SELECT * FROM AspNetUsers

我看到以下内容:

record

所以种子已经创建了。但为什么我不能登录?

此外,我知道如果我将用户名更改为与电子邮件相同,那么它可以工作,我可以登录。用户名和电子邮件必须与MVC 5中的ASP.NET成员身份相同吗?

1 个答案:

答案 0 :(得分:0)

在尝试了很多不同的事情之后,我选择了LukeP的解决方案here

我保留了身份,只是添加了一个名为DisplayUsername的新属性,并允许用户在注册时进行设置。