Tüm Detaylarıyla AspNetCore.Identity Kütüphanesi : Kurulum— Part 1

Merhabalar, şuan okumakta olduğunuz makaleyi ilerleyen süreçlerde kendime ihtiyaç duyguduğum takdirde bir rehber olması amacıyla kaleme aldım. Amacım tamamen Identity kütüphanesini öğrenmek üzerinedir. Sizler için de muhakkak faydalı bir kaynak olacaktır.

Startup.cs içerisine ilgili kodlarımızı ekliyoruz.

Identity’i ayağa kaldırmak amacıyla contextimizi oluşturuyoruz.

Contextimizi oluşturduktan sonra veri tabanımızın oluşması için Package Manager Console üzerinden ilgili komutlarımızı veriyoruz.

PM> add-migration

PM> update-database komutlarımızı çalıştırıyoruz.

Hata almamak için komutları doğru projede çalıştırdığınıza ve gerekli paketleri yüklediğinizden emin olun.

Tablolarımız nasıl bir anlam ifade ediyor ?

  • AspNetUsers : Kullanıcı bilgilerimiz içeririr.
  • AspNetRoles : Kullanıcı rollerimizi içerir. Bir kullanıcımıza bir veya birden fazla rol atayabilir veya bir rol altına bir veya birden fazla kullanıcı ekleyebiliriz.
  • AspNetRoleClaims & AspNetUserClaims : İddialar olarak türkçeye çevirebildiğimiz kavram ise mevcut bilgiler dışında key-value pair şeklinde diğer ihtiyacımız olan bilgilerimizi tuttuğumuz ve bu bilgiler ışığında da yetkilendirme yapabildiğimiz yapılardır.
  • AspNetUserTokens : Kullanıcıların token bilgilerini içerir.
  • AspNetUserLogins : Facebook, Google, Twitter gibi üçüncü parti servisler üzerinden oluşturduğumuz kimlik bilgilerini içerir.

Claims konusunda detayları merak edenler için :

https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff359101(v=pandp.10)?redirectedfrom=MSDN

https://stackoverflow.com/questions/21645323/what-is-the-claims-in-asp-net-identity

Veri tabanımızdaki identity ile varsayılan olarak gelen tablolarımızı özelleştirmek

En basit manada yukarıdaki tablolarımızı incelediğimiz zaman Users tablosunda bazı ihtiyacımız olan bilgileri ekleme gerekliliği hissedebiliriz. Mesela kullanıcını adı, soyadı, resim ve cinsiyet gibi ek bilgiler söz konusu olabilir.

Hadi bu işlemler ile devam edelim.

Not : Konumuz identity kullanımı olduğu için bazı normalizasyon kuralları göz ardı edilmiştir.

AppUser.cs ve AppRole.cs sınıflarımızı ekledikten sonra contextimizde bu bilgileri kullanması gerektiğini söylüyoruz.

İhtiyacımız olan eklemeleri yaptıktan sonra add-migration ve update-database işlemlerimizi tekrarlıyoruz.

  • Update işlemimiz sonrasında Ad, Soyad, Cinsiyet ve Resim kolonlarının Kullanıcı tablomuza eklendiğini görüyoruz.

Web projemiz üzerinden identity ve veri tabanı yapılandırmamız ile devam ediyoruz.

Kullanacağımız veri tabanı bilgimiz yanı sıra identitymizin hangi parametreler -AppUser, AppRole- ile çalışacağını ve hangi context ile build edileceği bilgilerimizi ekliyoruz.

Giriş ve Kayıt olma işlemlerimiz için gerekli ViewModellerimizi oluşturuyoruz.

Öncelikle işlemlerimizi yapacağımız sınıflarımızın bağımlılıklarını -Dependency Injection- ekliyoruz.

Daha sonra yine HomeController.cs içersinde Giriş yap işlemlerimiz için gerekli kodlarımızı ekliyoruz.

PasswordSignInAsync() metotuyla giriş işlemimizi gerçekleştiriyoruz.

Daha sonra yine HomeController.cs içersinde Kayıt olma işlemlerimiz için gerekli kodlarımızı ekliyoruz.

CreateAsync() metotuyla kullanıcı kaydımızı oluşturuyoruz.

Giriş Yap ve Kayıt Ol Formlarının Validasyonlarının Eklenmesi

DataAnnotationlarımızı ekledikten sonra şimdi de kontrollerimizin çalışıp çalışmadığını kontrol edelim.

Not : Bulunduğumuz noktada devam ederken identity yapısını uygulamaya geldiğimize göre temel MVC desenini bildiğinizi varsayarak bazı basit (modelstate vs.) kullanımları anlatmıyorum.

Öneri : Konuyla ilgili eksiği olduğunu düşünen arkadaşlarımıza Yavuz Selim hocanın Proje Geliştirerek ASP.NET Core Mvc/Api Öğrenin : A-Z eğitimini takip etmenizi öneririm.

Validasyonlarımızın da başarıyla çalıştığını gördüğümüze göre şimdi bir kullanıcı kaydı oluşturup. Giriş işlemimizi gerçekleştirelim.

Validasyon kurallarına uyarak kaydımızı başarıyla oluşturduk. Şimdi de Giriş yaparak devam edelim.

Giriş işlemimizden önce tarayıcımızın cookie alanının boş olduğunu gözlemliyoruz.

Ve birinci bölümümüzün sonuna gelirken şimdiye kadar işlemlerimizin gayet başarılı bir şekilde yürüdüğünü teyit etmiş bulunuyoruz.

Bir sonraki makalemize Çerez Yapılandırmaları, Hatalı giriş denemelerinde uygulanacak senaryolar, Kullanıcı Rollerinin yapılandırılması gibi konular ile devam edeceğim.

Devam edecek…

Demo proje : https://github.com/mustafadikyar/MyUtilities

MyUtilities reposu altındaki Core.Identity projesi referans alınmıştır.

Software Developer