ASP.NET Core Identity’yi kullanabilmek için projeyi oluştururken Additional Information aşamasında Authentication Type kısmını Individual Accounts olarak belirtiğimiz taktirde, Entity Framework Core ile Identity kullanımı için gerekli olan ayarlamalar yapılıp, gerekli paket ve dosyalar otomatik olarak oluşturuluyor. Ancak biz bu yazı serimizde varsayılan kurulumda bir takım değişikler yaparak ilerliyor olacağız. Projeyi ASP.NET Core 6 projesi üzerinden örneklendireceğiz.
IdentityCustomProject adında bir proje oluşturarak başlayalım. Projeyi oluştururken Additional Information aşamasında Authentication Type kısmını None olarak bırakıyoruz çünkü burada maksadımız Individual Accounts özelliğini projeye manuel olarak tanımlamak olacak. Aşağıda yer alan 4 komutu çalıştırıyoruz.
Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Çalıştırdığımız 4 paketten ilk üçü Entity Framework Core paketleri iken dördüncü paket ise Identity’i Entity Framewrok ile kullanabilmek için projeye eklediğimiz pakettir. Şimdi bir önceki yazımızda olduğu gibi custom User ve Role sınıflarımızı oluşturalım.
Models dosyasının içine AppUser ve AppRole sınıflarını aşağıdaki şekilde oluşturuyoruz.
using Microsoft.AspNetCore.Identity;
namespace IdentityCustomProject.Models
{
public class AppUser : IdentityUser<int>
{
public string Name { get; set; }
public string Surname { get; set; }
}
}
using Microsoft.AspNetCore.Identity;
namespace IdentityCustomProject.Models
{
public class AppRole : IdentityRole<int>
{
public DateTime CreatedDate { get; set; }
}
}
Primary Key’leri int olan ve belirttiğimiz ekstra propertyleri de alan custom User ve Role sınıflarımızı böylece oluşturmuş olduk.
Şimdi projemizin kök dizininde Data adında bir klasör ve bu klasörün altında da ApplicationDbContext adında bir sınıf oluşturuyor ve aşağıdaki şekilde düzenliyoruz. ()
using IdentityCustomProject.Models;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace IdentityCustomProject.Data
{
public class ApplicationDbContext : IdentityDbContext<AppUser, AppRole, int>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
{
}
}
}
Bu işlemden sonra, appsettings.json dosyasına gerekli olan bağlantı tanımlamasını aşağıdaki şekilde yapıyoruz.
{
"ConnectionStrings": {
"ApplicationDbConnectionString": "Server=.;Database=IdentityCustomProjectDB;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Şimdi sırada Program.cs dosyasını düzenlemek var. Aşağıdaki servisleri (veri tabanı bağlantısı ve identity için) Program.cs’ye ekliyoruz.
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("ApplicationDbConnectionString")));
builder.Services.AddIdentity<AppUser, AppRole>(options =>
{
options.SignIn.RequireConfirmedAccount = false;
options.User.RequireUniqueEmail = true; // Username otomatik unique olarak ayarlanıyor biz mail adresinin de unique olmasını istiyoruz.
}).AddEntityFrameworkStores<ApplicationDbContext>();
Ve Program.cs ‘nin ilgili alanında kullanacağımız servisleri belirtiyoruz.
app.UseAuthorization();
app.UseAuthentication();
Son olarak Package Manager Console üzerinden;
add-migration InitialMigration
komutu ile migration işlemi gerçekleştiriyor ve
update-database
komutu ile de veritabanını oluşturuyoruz.