我正在使用ASP.NET 5 RC1并使用Identity 3.0使用内置ASPNET架构和EF7使用用户名/密码提供身份验证 .
出于测试目的,我正在尝试使用从Startup.cs调用的静态方法为角色和用户播种数据库 . 以下代码适用于添加角色,但不适用于用户 . (我在Identity 3中找不到任何使用新RoleManager和UserManager类的示例代码) . 我在这里使用正确的方法调用UserManager吗?
if (!context.Roles.Any(r => r.Name == "Admin"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store, null, null, null, null, null);
var role = new IdentityRole { Name = "Admin" };
manager.CreateAsync(role);
}
if (!context.Roles.Any(r => r.Name == "User"))
{
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store, null, null, null, null, null);
var role = new IdentityRole { Name = "User" };
manager.CreateAsync(role);
}
if (!context.Users.Any(u => u.UserName == "darin"))
{
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store, null, null, null, null, null, null, null, null, null);
var user = new ApplicationUser { UserName = "darin", Email = "dherle@gmail.com" };
manager.CreateAsync(user, "admin");
manager.AddToRoleAsync(user, "Admin");
}
if (!context.Users.Any(u => u.UserName == "chris"))
{
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store, null, null, null, null, null, null, null, null, null);
var user = new ApplicationUser { UserName = "chris", Email = "dan@gmail.com" };
manager.CreateAsync(user, "chris");
manager.AddToRoleAsync(user, "User");
}
3 回答
我不确定为什么它不适合你 . 它可能来自你从哪里调用播种方法?例如 . 例如,当我从控制器中的操作调用它时,它正在复制用户帐户 .
当我按照link上的说明操作时,数据库播种对RC1起了作用 .
问题是用户创建块中的CreateAsync调用 . 当您调用manager.CreateAsync(user,“chris”)时,您尝试使用密码为“chris”的UserName“chris”创建用户 . 此类密码可能不符合Identity Framework的安全限制 .
无论如何,解决方案很简单:
我检查了ManageController中的现有样板代码 . 似乎需要为Seeding方法设置修饰符异步,并在适当的地方使用await来完成种子设定 .