Identity Server 4 Asp.Net Identity + EF Core не заполнен - PullRequest
0 голосов
/ 01 апреля 2019

Я в основном следовал всему уроку с нуля, кроме пропуска javascript-клиента.Тем не менее, я скопировал некоторый код из образца Asp.Net Identity + EF Core вместе и база данных со всеми таблицами была успешно создана.Тем не менее, когда я запускаю сервер идентификации, семян нет.Я отладил файл program.cs, и переменная seed всегда равна false, пропуская условие семени.

public class Program
{
    public static void Main(string[] args)
    {
        var seed = args.Any(x => x == "/seed");
        if (seed) args = args.Except(new[] { "/seed" }).ToArray();

        var host = CreateWebHostBuilder(args).Build();

        if (seed)
        {
            using (var scope = host.Services.GetRequiredService<IServiceScopeFactory>().CreateScope())
            {
                SeedData.EnsureSeedData(scope.ServiceProvider);
                return;
            }
        }

        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
}

это класс данных семени, как в примере

 public class SeedData
{
    public static void EnsureSeedData(IServiceProvider provider)
    {
        provider.GetRequiredService<ApplicationDbContext>().Database.Migrate();
        provider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
        provider.GetRequiredService<ConfigurationDbContext>().Database.Migrate();

        {
            var userMgr = provider.GetRequiredService<UserManager<ApplicationUser>>();
            var alice = userMgr.FindByNameAsync("alice").Result;
            if (alice== null)
            {
                alice = new ApplicationUser
                {
                    UserName = "alice"
                };
                var result = userMgr.CreateAsync(alice, "Pass123$").Result
                if (!result.Succeeded)
                {
                    throw new Exception(result.Errors.First().Description);
                }

                alice = userMgr.FindByNameAsync("alice").Result;

                result = userMgr.AddClaimsAsync(user, new Claim[]{
                            new Claim(JwtClaimTypes.Subject, "1"),
                            new Claim(JwtClaimTypes.Name, "Alice Smith"),
                            new Claim(JwtClaimTypes.GivenName, "Alice"),
                            new Claim(JwtClaimTypes.FamilyName, "Smith"),
                              new Claim(JwtClaimTypes.Email, "AliceSmith@email.com"),
                            new Claim(JwtClaimTypes.EmailVerified, "true", ClaimValueTypes.Boolean),
                            new Claim(JwtClaimTypes.Role, "Admin")                                
                        }).Result;
                if (!result.Succeeded)
                {
                    throw new Exception(result.Errors.First().Description);
                }
                Console.WriteLine("user created");
            }
            else
            {
                Console.WriteLine("user already exists");
            }                
        }

        {
            var context = provider.GetRequiredService<ConfigurationDbContext>();
            if (!context.Clients.Any())
            {
                foreach (var client in Config.GetClients())
                {
                    context.Clients.Add(client.ToEntity());
                }
                context.SaveChanges();
            }

            if (!context.IdentityResources.Any())
            {
                foreach (var resource in Config.GetIdentityResources())
                {
                    context.IdentityResources.Add(resource.ToEntity());
                }
                context.SaveChanges();
            }

            if (!context.ApiResources.Any())
            {
                foreach (var resource in Config.GetApis())
                {
                    context.ApiResources.Add(resource.ToEntity());
                }
                context.SaveChanges();
            }
        }
    }
}

я скучаю?Весь код одинаковый, класс запуска тоже и т. Д.

1 Ответ

0 голосов
/ 02 апреля 2019

Для прохождения string[] args вам нужно запустить проект по Project.exe вместо IIS Express.

Выполните Свойства проекта-> Отладка-> Аргументы приложения -> /seed -> Запустить проект из ProjectName.

В общем, вы можете рассмотреть возможность принятия решения о посеве, проверяя, есть ли какие-либо данные в базе данных, а не из аргументов команды.

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