加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读