ASP.NET Core ile Identity Kullanıcılarını Seed Etme

A

ASP.NET Identity, uygulama geliştirme için birçok seçenek sunar ve uygulanması kolaydır. Ancak, uygulamanızın gerekli tüm rollere sahip olduğundan emin olmak beklenenden daha karmaşık olabilir. Bu yazıda, yapılandırma işlemini gerçekleştirmek için kullanabileceğiniz birkaç seçenek keşfedilmektedir.

Değerleri Seed Etme

Kullanıcılar genellikle, Entity Framework'ün .HasData() gibi yerleşik yöntemlerini kullanarak girdileri manuel olarak eklemeyi tercih eder. Ancak bu yöntem bana zahmetli ve hata yapmaya yatkın geliyor; çünkü verilerin Identity'nin istediği gibi eklenmesi gerektiğinden ve gelecekteki değişikliklerin kırılmalara yol açabileceğinden emin olmanız gerekir.

Başlatma Kodunu Kullanma

Benim tercih ettiğim yöntem, uygulamanız inşa edildikten ancak çalıştırılmadan önce bir başlatma adımı eklemektir. Bu, servis sağlayıcısına bağlanmanıza ve gerekli olduğu şekilde bağımlılık enjeksiyonunu kullanmanıza olanak tanır. Uygulamanın başlangıç zamanına olan etkisi minimaldir ve bir yapı bayrağı, yapılandırma ayarı veya başka bir yol ile devre dışı bırakılabilir. Bunu uygulamak için genellikle iki yöntem ve başlatma işlemini gerçekleştirmek için bir kod bloğu eklerim.

İlk Yöntem: Gerekli Roller Sisteme Eklenir

private static async Task EnsureRoles(IServiceProvider serviceProvider)
{
    var roleManager = serviceProvider.GetRequiredService<RoleManager>();

    var existingRole = await roleManager.RoleExistsAsync("Admin");
    if (!existingRole)
    {
        await roleManager.CreateAsync(new Role { Name = "Admin" });
    }
    // Gerekli olduğu sürece bu işlem tekrarlanabilir.
}

İkinci Yöntem: Varsayılan Kimlik Bilgileriyle Kullanıcı Eklemek

Aşağıdaki kod, gerekli kullanıcıları ekler ve varsayılan kimlik bilgileriyle oluşturur. Bu bilgileri daha sonra değiştirebilirsiniz.

private static async Task EnsureUsers(IServiceProvider serviceProvider)
{
    var userManager = serviceProvider.GetRequiredService<UserManager>();
    var existingUser = await userManager.FindByEmailAsync("MyEmail");
    if (existingUser == null)
    {
        var newUser = new UserProfile()
        {
            Email = "MyEmail",
            UserName = "MyEmail",
            EmailConfirmed = true,
            FirstName = "Aydın",
            LastName = "Yağız",
            PhoneNumber = "MyNumber"
        };
        await userManager.CreateAsync(newUser, "MySPecialPassword");
        await userManager.AddToRolesAsync(newUser, new[] { "Admin" });
    }
}

Gerçek Başlatma Kodu

Son adımda, Program.cs dosyasındaki builder.Build() çağrısından sonra aşağıdaki kodu ekleyerek servis sağlayıcı üzerinden rolleri ve kullanıcıları ekleyebilirsiniz:

using (var scope = app.Services.CreateScope())
{
    var serviceProvider = scope.ServiceProvider;
    await EnsureRoles(serviceProvider);
    await EnsureUsers(serviceProvider);
}

Bu kod, uygulama kapsamında bir servis sağlayıcı oluşturur ve roller ile kullanıcıları eklemek için Dependency Injection (DI) kullanarak gerekli işlemleri gerçekleştirir.

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri