Alıştırma - Identity desteğini yapılandırma
Identity, özelleştirme olmadan kullanıma hazır olarak sunulur. Standart Identity kullanıcı arabirimi bileşenleri bir .NET Standard Razor Sınıf Kitaplığı’nda (RCL) paketlenir. RCL kullanıldığı için projeye birkaç dosya eklenir.
İlk EF Core geçişi uygulandıktan sonra, destekleyen veritabanı tabloları oluşturulur. Aşağıdaki diyagramda, destekleyen tabloların şemaları gösterilir:

Not
Yukarıdaki görüntüde veritabanındaki anahtar ve ilişkiler yer alır. Anahtar bir anahtardır ve sonsuz (yan yana 8) çok fazladır. Bir veritabanı 1-1, 1-çok ve çoka çok ilişki türüne sahip olabilir. Anahtarlar benzersizdir. Diyagramda bu birleşimlerin ve ilişkilerin nasıl oluşturulacakları gösterildi.
Bu ünitede, mevcut ASP.NET Core Razor Pages projesine Identity eklenecektir.
Projeye Identity ekleme
ASP.NET Core kod iskelesini yükleyin:
dotnet tool install dotnet-aspnet-codegenerator --version 3.1.2Aşağıdaki çıkış görüntülenir:
You can invoke the tool from this directory using the following commands: 'dotnet tool run dotnet-aspnet-codegenerator' or 'dotnet dotnet-aspnet-codegenerator'. Tool 'dotnet-aspnet-codegenerator' (version '3.1.2') was successfully installed. Entry is added to the manifest file /home/<USER>/aspnet-learn/src/ContosoPets.Ui/.config/dotnet-tools.json.İskele, şunları gerçekleştiren bir .NET Core aracıdır:
- Varsayılan Identity bileşenlerini projeye eklemek için kullanılır.
- Sonraki ünitede yer alan Identity kullanıcı arabirimi bileşenlerinin özelleştirilmesine olanak tanır.
- Bu modülde
dotnet aspnet-codegeneratoraracılığıyla çağrılır.
Aşağıdaki NuGet paketlerini projeye ekleyin:
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design --version 3.1.2 && \ dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore --version 3.1.3 && \ dotnet add package Microsoft.AspNetCore.Identity.UI --version 3.1.3 && \ dotnet add package Microsoft.EntityFrameworkCore.Design --version 3.1.3 && \ dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 3.1.3Bu paketler, iskele tarafından kullanılan kod oluşturma şablonlarını ve bağımlılıkları yükler.
İpucu
Kullanılabilir oluşturucuları görüntülemek için:
- Komut kabuğunda
dotnet aspnet-codegenerator -hkomutunu çalıştırın. - Visual Studio’da, Çözüm Gezgini’nde projeye sağ tıklayıp Ekle > Yeni İskele Öğesi seçeneğini belirleyin.
- Komut kabuğunda
Varsayılan Identity bileşenlerini projeye eklemek için iskeleyi kullanın. Proje kökünden aşağıdaki komutu çalıştırın:
dotnet aspnet-codegenerator identity \ --useDefaultUI \ --dbContext ContosoPetsAuthYukarıdaki komutta:
- olarak tanımlanan
identityoluşturucu, Identity çerçevesini projeye eklemek için kullanılır. --useDefaultUIseçeneği, varsayılan kullanıcı arabirimi öğelerini içeren bir RCL’nin kullanılacağını gösterir. Bileşenler için stil oluşturmak amacıyla Bootstrap kullanılır.- Oluşturulacak EF Core veritabanı bağlam sınıfının adını göstermeye yönelik
--dbContextseçeneği.
- olarak tanımlanan
Düzenleyicinin yenile simgesine tıklayarak dosya gezginini güncelleştirin.

Proje kökünde bir Areas dizin yapısı görüntülenir:
- Areas
- Identity
- Data
- ContosoPetsAuth.cs
- Pages
- _ValidationScriptsPartial.cshtml
- _ViewStart.cshtml
- IdentityHostingStartup.cs
- Data
- Identity
Alanlar, bir ASP.NET Core web uygulamasını daha küçük işlevsel gruplar halinde bölümlemeye yönelik bir yol sunar.
- Areas
PostgreSQL veritabanı sağlayıcısını ekleme
EF Core için PostgreSQL veritabanı sağlayıcını yüklemek amacıyla proje kökünden aşağıdaki komutu çalıştırın:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL --version 3.1.3
Bu NuGet paketi, PostgreSQL veritabanıyla etkileşime geçmeye yönelik bilgileri EF Core’a sağlar.
Veritabanı bağlantısını yapılandırma
Areas/Identity/IdentityHostingStartup.cs dosyasının
Configuremetodunu aşağıdaki kodla değiştirin:public void Configure(IWebHostBuilder builder) { builder.ConfigureServices((context, services) => { var connBuilder = new NpgsqlConnectionStringBuilder( context.Configuration.GetConnectionString("ContosoPetsAuthConnection")) { Username = context.Configuration["DbUsername"], Password = context.Configuration["DbPassword"] }; services.AddDbContext<ContosoPetsAuth>(options => options.UseNpgsql(connBuilder.ConnectionString)); services.AddDefaultIdentity<IdentityUser>() .AddDefaultUI() .AddEntityFrameworkStores<ContosoPetsAuth>(); }); }public void Configure(IWebHostBuilder builder) { builder.ConfigureServices((context, services) => { var connBuilder = new SqlConnectionStringBuilder( context.Configuration.GetConnectionString("ContosoPetsAuthConnection")) { UserID = context.Configuration["DbUsername"], Password = context.Configuration["DbPassword"] }; services.AddDbContext<ContosoPetsAuth>(options => options.UseSqlServer(connBuilder.ConnectionString)); services.AddDefaultIdentity<IdentityUser>() .AddDefaultUI() .AddEntityFrameworkStores<ContosoPetsAuth>(); }); }Yukarıdaki kodda:
Veritabanı kullanıcı adını ve parolasını almak için Azure Key Vault yapılandırma sağlayıcısı örtük olarak kullanılır:
Username = context.Configuration["DbUsername"], Password = context.Configuration["DbPassword"]UserID = context.Configuration["DbUsername"], Password = context.Configuration["DbPassword"]Veritabanı kullanıcı adı ve parolası, appsettings.json dosyasında depolanan bağlantı dizesine eklenir.
ContosoPetsAuthadlı EF Core veritabanı bağlam sınıfı, uygun bağlantı dizesiyle yapılandırılır.Varsayılan kullanıcı arabirimi, belirteç sağlayıcıları ve tanımlama bilgisi tabanlı kimlik doğrulamasını da içeren Identity hizmetleri kaydedilir.
Ayrıca, IdentityHostingStartup.cs dosyasının en üstünde bulunan
usingdeyimleri bloğuna aşağıdaki kodu ekleyin. Yaptığınız değişiklikleri kaydedin.using Npgsql;Yukarıdaki kod,
ConfiguremetodundakiNpgsqlConnectionStringBuildersınıfına yapılan başvuruyu çözümler.using Microsoft.Data.SqlClient;Yukarıdaki kod,
ConfiguremetodundakiSqlConnectionStringBuildersınıfına yapılan başvuruyu çözümler.Startup.cs dosyasının
Configuremetodunda// Add the app.UseAuthentication codeaçıklamasını aşağıdaki kodla değiştirin. Yaptığınız değişiklikleri kaydedin.app.UseAuthentication();Yukarıdaki kod, kimlik doğrulaması özelliklerini etkinleştirir. Daha ayrıntılı olarak, uygulamanın HTTP isteklerini işleyen işlem hattına ASP.NET Core kimlik doğrulaması ara yazılımının bir örneği eklenir.
Veritabanı bağlantı dizesini konsola yazdırmak için aşağıdaki komutu çalıştırın. Bağlantı dizesini panonuza kopyalayın.
echo $dbConnectionStringappsettings.json dosyasında,
ContosoPetsAuthConnectionöğesine yönelik bağlantı dizesini önceki adımdaki bağlantı dizesiyle değiştirin. Yaptığınız değişiklikleri kaydedin.ConnectionStringsbölümü, aşağıdaki JSON’a benzer görünmelidir:"ConnectionStrings": { "ContosoPetsAuthConnection": "Server={HOST NAME}.postgres.database.azure.com;Database=contosopets;Port=5432;Ssl Mode=Require;" }"ConnectionStrings": { "ContosoPetsAuthConnection": "Data Source={HOST NAME}.database.windows.net;Initial Catalog=ContosoPets;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" }Uygulamayı derlemek için aşağıdaki komutu çalıştırın:
dotnet buildDerleme hiç uyarı alınmadan başarılı olur. Derleme başarısız olursa, sorun giderme bilgileri için çıkışı inceleyin.
Veritabanını güncelleştirme
Entity Framework Core geçiş aracını yükleme:
dotnet tool install dotnet-ef --version 3.1.3Aşağıdaki çıkış görüntülenir:
You can invoke the tool from this directory using the following commands: 'dotnet tool run dotnet-ef' or 'dotnet dotnet-ef'. Tool 'dotnet-ef' (version '3.1.3') was successfully installed. Entry is added to the manifest file /home/<USER>/aspnet-learn/src/ContosoPets.Ui/.config/dotnet-tools.json.Geçiş aracı bir .NET Core aracı olup:
- Kimlik varlığı modelini destekleyen veritabanını oluşturmak ve güncelleştirmek için geçiş adlı kod oluşturur.
- Mevcut bir veritabanına karşı geçişleri yürütür.
- Bu modülde
dotnet efaracılığıyla çağrılır.
Veritabanını güncelleştirmek için bir EF Core geçişi oluşturun ve çalıştırın:
dotnet ef migrations add CreateIdentitySchema && \ dotnet ef database updateCreateIdentitySchemaEF Core geçişi, Identity’yi destekleyen tabloları oluşturmak için bir Veri Tanımlama Dili (DDL) değişiklik betiği uyguladı. Örneğin, aşağıdaki alıntı, geçiş tarafından oluşturulan birCREATE TABLEdeyimini gösterir:info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (329ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE TABLE "AspNetUsers" ( "Id" text NOT NULL, "UserName" character varying(256) NULL, "NormalizedUserName" character varying(256) NULL, "Email" character varying(256) NULL, "NormalizedEmail" character varying(256) NULL, "EmailConfirmed" boolean NOT NULL, "PasswordHash" text NULL, "SecurityStamp" text NULL, "ConcurrencyStamp" text NULL, "PhoneNumber" text NULL, "PhoneNumberConfirmed" boolean NOT NULL, "TwoFactorEnabled" boolean NOT NULL, "LockoutEnd" timestamp with time zone NULL, "LockoutEnabled" boolean NOT NULL, "AccessFailedCount" integer NOT NULL, CONSTRAINT "PK_AspNetUsers" PRIMARY KEY ("Id") );info: Microsoft.EntityFrameworkCore.Database.Command[20101] Executed DbCommand (98ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE TABLE [AspNetUsers] ( [Id] nvarchar(450) NOT NULL, [UserName] nvarchar(256) NULL, [NormalizedUserName] nvarchar(256) NULL, [Email] nvarchar(256) NULL, [NormalizedEmail] nvarchar(256) NULL, [EmailConfirmed] bit NOT NULL, [PasswordHash] nvarchar(max) NULL, [SecurityStamp] nvarchar(max) NULL, [ConcurrencyStamp] nvarchar(max) NULL, [PhoneNumber] nvarchar(max) NULL, [PhoneNumberConfirmed] bit NOT NULL, [TwoFactorEnabled] bit NOT NULL, [LockoutEnd] datetimeoffset NULL, [LockoutEnabled] bit NOT NULL, [AccessFailedCount] int NOT NULL, CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id]) );Veritabanındaki tabloları listelemek için aşağıdaki komutu çalıştırın:
db -c "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema' ORDER BY tablename"Çıkış, tabloların oluşturulduğunu onaylar:
tablename ----------------------- AspNetRoleClaims AspNetRoles AspNetUserClaims AspNetUserLogins AspNetUserRoles AspNetUserTokens AspNetUsers __EFMigrationsHistory (8 rows)db -Q "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='dbo' ORDER BY TABLE_NAME" -Y 25Tabloların oluşturulduğunu onaylayan aşağıdaki çıkış görüntülenir.
TABLE_NAME ------------------------- __EFMigrationsHistory AspNetRoleClaims AspNetRoles AspNetUserClaims AspNetUserLogins AspNetUserRoles AspNetUsers AspNetUserTokens (8 rows affected)
Oturum açma ve kayıt bağlantılarını ekleme
Pages/Shared/_Layout.cshtml dosyasında,
@* Add the _LoginPartial partial view *@açıklamasını aşağıdakiyle değiştirin. Yaptığınız değişiklikleri kaydedin.<partial name="_LoginPartial" />Yukarıdaki işaretleme, varsayılan düzeni kullanan herhangi bir sayfanın üst bilgisinde yer alan
_LoginPartialkısmi görünümünü işler._LoginPartial, Identity iskelesi tarafından eklendi. Kullanıcı oturum açmadıysa, bu kısmi görünüm Oturum açın ve Kaydolun bağlantılarını kullanıcıya gösterir.Uygulamayı derlemek için aşağıdaki komutu çalıştırın:
dotnet build --no-restoreSon derlemeden sonra NuGet paketi eklenmediğinden
--no-restoreseçeneği de eklenmiştir. Derleme işlemi, NuGet paketlerinin geri yüklenmesini atlar ve uyarı oluşturmadan başarıyla tamamlanır. Derleme başarısız olursa, sorun giderme bilgileri için çıkışı inceleyin.Aşağıdaki komutu çalıştırarak uygulamayı Azure App Service’e dağıtın:
az webapp upNot
Proje kökündeki .azure/config dosyası,
az webapp uptarafından kullanılan yapılandırma değerlerini içerir.Uygulamanın URL’sini görmek için aşağıdaki komutu çalıştırın. Tarayıcınızda bu URL’ye gidin.
echo $webAppUrlUygulamanın üst bilgisinde bulunan Kaydolun bağlantısına tıklayın. Yeni bir hesap oluşturmak için formu doldurun.
Başarıyla kaydolduktan sonra:
- Giriş sayfasına yönlendirilirsiniz.
- Uygulamanın üstbilgisinde Merhaba [E-posta adresi]! iletisi ve Oturumu kapat bağlantısı görüntülenir.
- .AspNetCore.Identity.Application adlı bir tanımlama bilgisi oluşturulur. Identity, kullanıcı oturumlarını tanımlama bilgisi tabanlı kimlik doğrulaması ile korur.
Uygulamanın üst bilgisinde bulunan Oturumu kapat bağlantısına tıklayın.
Oturum başarıyla kapatıldıktan sonra, kullanıcı oturumunu sonlandırmak için .AspNetCore.Identity.Application tanımlama bilgisi silinir.
Yardıma mı ihtiyacınız var? Sorun giderme kılavuzumuza gözatın veya sorun bildirerek belirli bir konuda geri bildiriminizi paylaşın.