身份2的种子数据库
我遇到了使用Identity v2为数据库播种的问题。 我将IdentityModel从MVC5项目分离到我的数据访问层,我也设置了EF迁移。 所以我注释掉了在“IdentityConfig.cs”中使用的代码来创建初始用户并将代码放在我的种子数据库中,看起来像这样
protected override void Seed(Repository.DataContext.IdentityDb context) { // var userManager = HttpContext.Current.GetOwinContext().GetUserManager(); // var roleManager = HttpContext.Current.GetOwinContext().Get(); var owinContext = new OwinContext(); var userManager = owinContext.GetUserManager(); var roleManager = owinContext.Get(); const string name = "admin@admin.com"; const string password = "Admin@123456"; const string roleName = "Admin"; // //Create Role Admin if it does not exist var role = roleManager.FindByName(roleName); if (role == null) { role = new IdentityRole(roleName); var roleresult = roleManager.Create(role); } var user = userManager.FindByName(name); if (user == null) { user = new ApplicationUser { UserName = name, Email = name }; var result = userManager.Create(user, password); result = userManager.SetLockoutEnabled(user.Id, false); } // // Add user admin to Role Admin if not already added var rolesForUser = userManager.GetRoles(user.Id); if (!rolesForUser.Contains(role.Name)) { var result = userManager.AddToRole(user.Id, role.Name); } }
现在当我运行命令update-database时,我收到了一个错误
Value cannot be null. Parameter name: manager
看起来,我在这两行代码中得到null
var userManager = owinContext.GetUserManager(); var roleManager = owinContext.Get();
有什么建议吗?
这是避免使用OWIN上下文的方法:
protected override void Seed(Repository.DataContext.IdentityDb context) var roleStore = new RoleStore(context); var roleManager = new RoleManager (roleStore); var userStore = new UserStore(context); var userManager = new UserManager (userStore); var user = new ApplicationUser { UserName = "sallen" }; userManager.Create(user, "password"); roleManager.Create(new IdentityRole { Name = "admin" }); userManager.AddToRole(user.Id, "admin"); }
我通过使用:
protected override void Seed(ApplicationDbContext context) { context.Configuration.LazyLoadingEnabled = true; //var userManager = HttpContext.Current // .GetOwinContext().GetUserManager(); //var roleManager = HttpContext.Current // .GetOwinContext().Get(); var roleStore = new RoleStore(context); var roleManager = new RoleManager(roleStore); var userStore = new UserStore(context); var userManager = new UserManager(userStore); ...
嗨,在启动类下,请确保您已调用app.CreatePerOwinContext(ApplicationDbContext.Create); app.CreatePerOwinContextApplicationUserManager.Create); app.CreatePerOwinContextApplicationSignInManager.Create);
app.CreatePerOwinContext(ApplicationRoleManager.Create);
最新的东西都是异步和使用声明。 如果不存在超级用户,那么迁移对我来说是有用的…
protected override void Seed(Holos.Service.Models.ApplicationDbContext context) { var email = "xxxx@xxxx.com"; var password = "xxxxx"; var userStore = new UserStore(context); var userManager = new ApplicationUserManager(userStore); var user = userManager.FindByEmailAsync(email).Result; if (user == null) { var adminUser = new ApplicationUser() { Email = email, UserName = email }; var result = userManager.CreateAsync(adminUser, password); result.Wait(); userManager.AddClaimAsync(adminUser.Id, new Claim("Read", "*")).Wait(); userManager.AddClaimAsync(adminUser.Id, new Claim("Create", "*")).Wait(); userManager.AddClaimAsync(adminUser.Id, new Claim("Update", "*")).Wait(); userManager.AddClaimAsync(adminUser.Id, new Claim("Delete", "*")).Wait(); userManager.AddClaimAsync(adminUser.Id, new Claim("UserType", "SuperUser")).Wait(); } }
- Asp.net身份entity framework数据库第一种方法有自己的表定义
- 坚持要求的索赔
- Identity 2.0:创建自定义ClaimsIdentity例如:User.Identity.GetUserById (int id)for Per Request Validation
- Authorize和GetRoles在ASP.NET标识中不起作用
- 在ASP.Net Identity 2.0上包含属性UserManager.Users.ToListAsync和UserManager.FindByIdAsync
- ASP.NET身份2记住我 – 用户被注销
- 多站点ASP.NET身份2的中间件
- 自定义电子邮件确认令
- 用户通过“记住我”退出