ef-code-first – 如何通过使用Identity ASP.NET MVC的代码优先
发布时间:2020-12-15 19:24:13 所属栏目:asp.Net 来源:网络整理
导读:我已经创建了一个新的干净的asp.net 5项目(rc1-final).使用身份认证我只需要ApplicationDbContext.cs与以下代码: public class ApplicationDbContext : IdentityDbContextApplicationUser{ protected override void OnModelCreating(ModelBuilder builder)
我已经创建了一个新的干净的asp.net 5项目(rc1-final).使用身份认证我只需要ApplicationDbContext.cs与以下代码:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { protected override void OnModelCreating(ModelBuilder builder) { // On event model creating base.OnModelCreating(builder); } } 请注意ApplicationDbContext使用IdentityDbContext而不是DbContext. 有任何IdentityConfig.cs.我需要把经典的保护覆盖void Seed来创建角色和用户,如果它不存在? 解决方法
我这样做的方法是在模型命名空间中创建一个类.
public class SampleData { public static void Initialize(IServiceProvider serviceProvider) { var context = serviceProvider.GetService<ApplicationDbContext>(); string[] roles = new string[] { "Owner","Administrator","Manager","Editor","Buyer","Business","Seller","Subscriber" }; foreach (string role in roles) { var roleStore = new RoleStore<IdentityRole>(context); if (!context.Roles.Any(r => r.Name == role)) { roleStore.CreateAsync(new IdentityRole(role)); } } var user = new ApplicationUser { FirstName = "Muhammad",LastName = "Abdullah",Email = "abdullahnaseer999@gmail.com",NormalizedEmail = "ABDULLAHNASEER999@GMAIL.COM",UserName = "Owner",NormalizedUserName = "OWNER",PhoneNumber = "+923366633352",EmailConfirmed = true,PhoneNumberConfirmed = true,SecurityStamp = Guid.NewGuid().ToString("D") }; if (!context.Users.Any(u => u.UserName == user.UserName)) { var password = new PasswordHasher<ApplicationUser>(); var hashed = password.HashPassword(user,"secret"); user.PasswordHash = hashed; var userStore = new UserStore<ApplicationUser>(context); var result = userStore.CreateAsync(user); } AssignRoles(serviceProvider,user.Email,roles); context.SaveChangesAsync(); } public static async Task<IdentityResult> AssignRoles(IServiceProvider services,string email,string[] roles) { UserManager<ApplicationUser> _userManager = services.GetService<UserManager<ApplicationUser>>(); ApplicationUser user = await _userManager.FindByEmailAsync(email); var result = await _userManager.AddToRolesAsync(user,roles); return result; } } 在启动时运行此代码.在Startup.cs的配置方法结束后,路由配置后添加以下代码作为Stafford Williams说. SampleData.Initialize(app.ApplicationServices); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 在EC2实例上运行的MVC应用程序无法访问RDS数
- asp-classic – 用于ASP的“Dim”是什么?
- asp.net-core-mvc – 如何防止Entity Framework Core 2.0重
- asp.net-mvc – ASP.NET MVC项目架构
- asp.net-mvc – 如何在存储库MVC6中注入ApplicationDbConte
- asp.net – IIS 6不显示默认文档(default.aspx)
- asp.net-mvc – 数据模型需要两个属性之一
- asp.net-mvc – 根据浏览器接受语言自动设置uiCulture
- asp.net – 部署了另一个应用程序后无法找到CodeDom提供程序
- asp.net core webapi文件上传
推荐文章
站长推荐
- asp.net-mvc – ASP.NET MVC单元测试 – 会话
- 如何在ASP.NET MVC中渲染HTML字符串?
- [你必须知道的.NET] 第八回:品味类型---值类型与
- asp.net-mvc-3 – 动态地为每个列的ASP.NET MVC
- AspNetCore.Authentication.JwtBearer失败,没有S
- asp.net-web-api – ASP.NET Web API RTM和子域路
- asp.net核心 – aspnetcidev和aspnetvnext之间的
- asp.net-core – ASP.Net核心RC1:System.Argume
- asp.net – 无法加载mysql.web程序集
- asp.net – 替代SSRS前端
热点阅读