Возможно ли / желательно ли посеять пользователей / роли с помощью системы EFCore 2.1 Data Seeding? - PullRequest
0 голосов
/ 07 июня 2018

Начиная с EFCore 2.1, можно заполнять данные, используя метод DbContext OnModelCreating.

https://docs.microsoft.com/en-us/ef/core/modeling/data-seeding

Однако создание пользователя / роли обычно выполняется UserManager / RoleManager.

Теперь я могу вручную создать роль или пользователя - но, например, в случае пользователя, мне нужно самому хэшировать пароль (и я не знаю, какой метод хеширования используется UserManager, не копаясь в источнике)

Есть ли способ обойти это?Или я должен придерживаться статического метода заполнения, который запускается при запуске, как в предыдущих версиях Entity Framework Core?

1 Ответ

0 голосов
/ 29 августа 2018

Если вы хотите использовать метод OnModelCreating с методом HasData, вы можете сделать это следующим образом:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        ApplicationUser appUser = new ApplicationUser
        {
            UserName = "tester",
            Email = "tester@test.com",
            NormalizedEmail = "tester@test.com".ToUpper(),
            NormalizedUserName = "tester".ToUpper(),
            TwoFactorEnabled = false,
            EmailConfirmed = true,
            PhoneNumber = "123456789",
            PhoneNumberConfirmed = false
        };

        PasswordHasher<ApplicationUser> ph = new PasswordHasher<ApplicationUser>();
        appUser.PasswordHash = ph.HashPassword(appUser, "Your-PW1");

        modelBuilder.Entity<IdentityRole>().HasData(
            new IdentityRole { Name = "Admin", NormalizedName = "ADMIN" },
            new IdentityRole { Name = "User", NormalizedName = "USER"}
        );
        modelBuilder.Entity<ApplicationUser>().HasData(
            appUser
        );
    }

Если вы создаете пользователя вне метода HasData, вы можете использоватьPasswordHasher.Он будет хэшировать пароль для вас.Затем просто поместите созданного пользователя в HasData вместо создания нового там.Я не знаю, лучше ли это, чем посев при запуске, но это один из способов сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...