﻿
{"id":11590,"date":"2019-08-10T22:34:59","date_gmt":"2019-08-10T22:34:59","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=11590"},"modified":"2019-08-11T10:37:56","modified_gmt":"2019-08-11T10:37:56","slug":"asp-net-core-identity-identity-altyapisi-kurulumu-ii","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-identity-altyapisi-kurulumu-ii\/","title":{"rendered":"Asp.NET Core Identity \u2013 Identity Altyap\u0131s\u0131 Kurulumu &#8211; II"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bir \u00f6nceki <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-nedir-ve-temel-kavramlar-i\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET Core Identity \u2013 Nedir ve Temel Kavramlar? \u2013 I<\/a> ba\u015fl\u0131kl\u0131 i\u00e7eri\u011fimizde Asp.NET Core Identity k\u00fct\u00fcphanesine dair teorik olarak bir giri\u015f yapm\u0131\u015ft\u0131k. Bu i\u00e7eri\u011fimizde ise bir Asp.NET Core uygulamas\u0131nda Identity alt yap\u0131s\u0131n\u0131n nas\u0131l kuruldu\u011funu inceleyece\u011fiz.<\/p>\n<p>Her\u015feyden \u00f6nce Asp.NET Core Identity k\u00fct\u00fcphanesini bir projeye entegre ederken olay\u0131 hem k\u00fct\u00fcphane hem de veritaban\u0131 a\u00e7\u0131s\u0131ndan de\u011ferlendirmemiz gerekmektedir. K\u00fct\u00fcphane a\u00e7\u0131s\u0131ndan <em>Microsoft.AspNetCore.Identity<\/em> k\u00fct\u00fcphanesinin projeye y\u00fcklenmi\u015f olmas\u0131 gerekti\u011fini ve Asp.NET Core uygulamalar\u0131nda ilgili k\u00fct\u00fcphanenin dahili olarak geldi\u011fini bu y\u00fczden ekstradan i\u015flem yapmam\u0131za gerek kalmad\u0131\u011f\u0131n\u0131 yukar\u0131da adresini verdi\u011fimiz \u00f6nceki makalemizde belirtmi\u015ftik.<\/p>\n<p>Veritaban\u0131 a\u00e7\u0131s\u0131ndan ise Asp.NET Core Identity k\u00fct\u00fcphanesi projeye entegre edece\u011fi \u00fcyelik sistemiyle alakadar bir veritaban\u0131 d\u00fczeni getirmektedir. \u00dcye bilgilerini, rolleri, tan\u0131mlamalar\u0131, token de\u011ferlerini, gerekli cross table g\u00f6revi \u00fcstlenen ara tablolar\u0131 vs. t\u00fcm de\u011ferleri tutaca\u011f\u0131 bir yap\u0131lanma beklemektedir. Dolay\u0131s\u0131yla bu veritaban\u0131 kar\u015f\u0131l\u0131\u011f\u0131n\u0131 manuel bir \u015fekilde olu\u015fturmam\u0131z m\u00fcmk\u00fcn olsa dahi, f\u0131trat olarak Asp.NET Core Identity yap\u0131lanmas\u0131 en g\u00fcncel ve dinamik veritaban\u0131 yakla\u015f\u0131m\u0131 olan <a href=\"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Code First<\/a> ile tam bir uyumluluk sergilemekte ve birazdan i\u00e7eri\u011fimizde ele alaca\u011f\u0131m\u0131z in\u015fa neticesinde yap\u0131lan ve modellenen Identity \u00e7al\u0131\u015fmas\u0131 neticesinde veritaban\u0131na uygun tablolar\u0131 migrate edecek ve bizi manuel yap\u0131lanman\u0131n getirece\u011fi olas\u0131 hatalardan net bir \u015fekilde ar\u0131nd\u0131rm\u0131\u015f olacakt\u0131r.<\/p>\n<blockquote style=\"color:green;\"><p>Asp.NET Core Identity, ORM sistemi olan Entity Framework k\u00fct\u00fcphanesinin <a href=\"https:\/\/www.gencayyildiz.com\/blog\/entity-framework-ile-code-first-yaklasimi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Code First<\/a> yakla\u015f\u0131m\u0131yla %100 uyumlu bir mimaridir.<\/p><\/blockquote>\n<h3>Proje Alt Yap\u0131s\u0131<\/h3>\n<p>\u0130lk olarak &#8220;Empty&#8221; olacak \u015fekilde bir Asp.NET Core uygulamas\u0131 ba\u015flat\u0131larak &#8220;Startup.cs&#8221; s\u0131n\u0131f\u0131nda a\u015fa\u011f\u0131daki geli\u015ftirmeler yap\u0131lmal\u0131d\u0131r.<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n    public class Startup\r\n    {\r\n        public IConfiguration Configuration { get; set; }\r\n        public Startup(IConfiguration configuration) =&gt; Configuration = configuration;\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddMvc();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n                app.UseDeveloperExceptionPage();\r\n\r\n            app.UseStatusCodePages();\r\n            app.UseStaticFiles();\r\n            app.UseMvc(_ =&gt; _.MapRoute(&quot;Default&quot;, &quot;{controller=Home}\/{action=Index}\/{id?}&quot;));\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015euanda &#8220;Startup.cs&#8221; s\u0131n\u0131f\u0131m\u0131z olmas\u0131 gereken en sade \u015fekliyle ayarlanm\u0131\u015ft\u0131r. Birazdan Identity yap\u0131lanmas\u0131 in\u015fa edilecek ve gerekli authenticaion yap\u0131lanmas\u0131 tekrar bu s\u0131n\u0131f \u00fczerinden modifiye edilecektir.<\/p>\n<h3>En Temel Identity S\u0131n\u0131flar\u0131<\/h3>\n<p>Asp.NET Core Identity k\u00fct\u00fcphanesinde en temel akt\u00f6rlerimiz &#8220;IdentityUser&#8221; ve &#8220;IdentityRole&#8221; s\u0131n\u0131flar\u0131d\u0131r. En nihayetinde \u00fcyelik sistemi olan Identity mimarisi, bir kullan\u0131c\u0131y\u0131 genel ge\u00e7er modelleyen ve o kullan\u0131c\u0131ya dair rolleri tan\u0131mlayan bu iki s\u0131n\u0131f ile bizlere e\u015flik edecektir.<\/p>\n<table>\n<thead>\n<tr>\n<th>IdentityUser<\/th>\n<th>IdentityRole<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Sistem \u00fczerinde kullan\u0131c\u0131lar\u0131 temsil eden s\u0131n\u0131ft\u0131r.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II.jpg\" alt=\"Asp.NET Core Identity \u2013 Alt Yap\u0131 Kurulumu - II\" width=\"469\" height=\"391\" class=\"aligncenter size-full wp-image-11598\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II.jpg 469w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-300x250.jpg 300w\" sizes=\"auto, (max-width: 469px) 100vw, 469px\" \/><\/a><br \/>\nYukar\u0131daki ekran al\u0131nt\u0131s\u0131nda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere i\u00e7erisinde UserName, Email vs. gibi bir kullan\u0131c\u0131ya dair genel ge\u00e7er bilgileri bar\u0131nd\u0131rmaktad\u0131r.<br \/>\n<strong>Peki nas\u0131l kullan\u0131l\u0131r?<\/strong><br \/>\nUygulamam\u0131zdaki kullan\u0131c\u0131lar\u0131 temsil edecek ve biryandan da modelleyecek olan &#8220;AppUser&#8221;<span style=\"font-size:9px;\">(istedi\u011finiz ismi verebilirsiniz)<\/span> ismini verdi\u011fimiz bir s\u0131n\u0131f tasarlayaca\u011f\u0131z. \u0130\u015fte bu s\u0131n\u0131f IdentityUser s\u0131n\u0131f\u0131ndan t\u00fcretilecektir. Yaz\u0131m\u0131z\u0131n ileriki sat\u0131rlar\u0131nda ele alaca\u011f\u0131m\u0131z bu operasyon neticesinde &#8220;AppUser&#8221; s\u0131n\u0131f\u0131 IdentityUser s\u0131n\u0131f\u0131ndan gerekli propertyleri kal\u0131t\u0131m arac\u0131l\u0131\u011f\u0131yla miras edinecektir. Neticede ald\u0131\u011f\u0131 kal\u0131t\u0131m ile tasarlanm\u0131\u015f olan &#8220;AppUser&#8221; s\u0131n\u0131f\u0131n\u0131 Code First ile migrate etti\u011fimizde mirastan gelen ilgili propertyler kolon olarak olu\u015fturulacakt\u0131r. Bu haz\u0131r propertyler d\u0131\u015f\u0131nda ihtiyac\u0131m\u0131za d\u00f6n\u00fck t\u00fcm custom propertyleri &#8220;AppUser&#8221; s\u0131n\u0131f\u0131na olu\u015fturarak migrate neticesindeki veritaban\u0131na eklenebilecektir.\n<\/td>\n<td>Kullan\u0131c\u0131n\u0131n rollerini tan\u0131mlayan s\u0131n\u0131ft\u0131r. Bir rolle ili\u015fkili t\u00fcm verileri bar\u0131nd\u0131rmaktad\u0131r.<br \/>\n<strong>Peki nas\u0131l kullan\u0131l\u0131r?<\/strong><br \/>\n\u0130htiya\u00e7 do\u011frultusunda &#8220;AppUserRole&#8221;<span style=\"font-size:9px;\">(istedi\u011finiz ismi verebilirsiniz)<\/span> isminde bir s\u0131n\u0131f olu\u015fturaca\u011f\u0131z. Bu s\u0131n\u0131f\u0131n IdentityRole s\u0131n\u0131f\u0131nda t\u00fcretilmesi yeterlidir. E\u011fer ki \u00f6zel kolonlara ihtiyac\u0131m\u0131z olursa, &#8220;AppUserRole&#8221; s\u0131n\u0131f\u0131na eklenen propertyler sayesinde o kolonlar olu\u015fturulmu\u015f olacak ve migrate neticesinde veritaban\u0131na yans\u0131t\u0131lacakt\u0131r.\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Temel s\u0131n\u0131flar\u0131m\u0131z\u0131da tan\u0131d\u0131ktan sonra \u015fimdi s\u0131ra Identity mimarisini uygulamada aya\u011fa kald\u0131rmaya geldi&#8230;<\/p>\n<h4 style=\"color:red;\">Ad\u0131m 1<\/h4>\n<p>Projede &#8220;Models&#8221; isimli klas\u00f6r olu\u015ftural\u0131m ve i\u00e7erisine &#8220;Authentication&#8221; isminde bir klas\u00f6r daha olu\u015ftural\u0131m. Bundan sonraki t\u00fcm yap\u0131lanmalar en son olu\u015fturulan bu &#8220;Authentication&#8221; isimli klas\u00f6r i\u00e7erisinde ger\u00e7ekle\u015ftirilecektir. <\/p>\n<p>\u015eimdi ilk olarak kullan\u0131c\u0131lar\u0131m\u0131z\u0131 temsil edecek olan s\u0131n\u0131f\u0131m\u0131z\u0131 tasarlayal\u0131m. Bu s\u0131n\u0131f\u0131m\u0131z\u0131n ad\u0131 istedi\u011finiz herhangi bir de\u011ferde olabilir. Ben burada \u00f6rnek ama\u00e7l\u0131 &#8220;AppUser&#8221; ismini veriyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class AppUser : IdentityUser\r\n    {\r\n    }\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8220;AppUser&#8221; s\u0131n\u0131f\u0131 olu\u015fturulmu\u015f ve hemen akabinde &#8220;IdentityUser&#8221; s\u0131n\u0131f\u0131nda t\u00fcretilmi\u015ftir. B\u00f6ylece bu s\u0131n\u0131f uygulamada t\u00fcm kullan\u0131c\u0131lar\u0131m\u0131za model olabilecektir. \u015eimdilik bu s\u0131n\u0131fa herhangi bir custom property girmiyorum. \u0130lerleyen makalelerde custom property girildi\u011fi taktirde nas\u0131l bir fark yaratt\u0131\u011f\u0131na dair mukayesede bulunaca\u011f\u0131z&#8230;<\/p>\n<h4 style=\"color:red;\">Ad\u0131m 2<\/h4>\n<p>Bu i\u00e7eri\u011fimizdeki esas gayemiz basit bir Identity mekanizmas\u0131n\u0131 aya\u011fa kald\u0131rabilmektir. Bundan dolay\u0131 kullan\u0131c\u0131lar\u0131 temsil eden bir s\u0131n\u0131f\u0131n olmas\u0131 bizim i\u00e7in yeterlidir lakin yukar\u0131da bahsedilen IdentityRole s\u0131n\u0131f\u0131ndan t\u00fcreyen ve sistemdeki rolleri tan\u0131mlayan bir s\u0131n\u0131f in\u015fa etmemize \u015fimdilik gerek yoktur. <span style=\"font-size:11px;\">Merak etmeyin, ilerleyen makalelerde a&#8217;dan z&#8217;ye her\u015feyi, en do\u011fru \u015fekilde incelemi\u015f olacaks\u0131n\u0131z \ud83d\ude42<\/span><\/p>\n<p>Art\u0131k bu noktaya kadar elimizde kullan\u0131c\u0131lar\u0131 modelleyen bir &#8220;AppUser&#8221; s\u0131n\u0131f\u0131 mevcuttur. Dolay\u0131s\u0131yla \u015fimdi yapmam\u0131z gereken Code First yakla\u015f\u0131m\u0131yla \u00fcretilecek\/migrate edilecek olan veritaban\u0131m\u0131z\u0131n bir kar\u015f\u0131l\u0131\u011f\u0131 olan DbContext s\u0131n\u0131f\u0131n\u0131 \u00fcretmektir. Bunun i\u00e7in &#8220;Models&#8221; klas\u00f6r\u00fc alt\u0131nda &#8220;Context&#8221; isimli bir klas\u00f6r olu\u015ftural\u0131m ve i\u00e7erisinde &#8220;AppDbContext&#8221; isminde bir s\u0131n\u0131f \u00fcretelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class AppDbContext : IdentityDbContext&lt;AppUser&gt;\r\n    {\r\n        public AppDbContext(DbContextOptions&lt;AppDbContext&gt; dbContext) : base(dbContext) { }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer olu\u015fturulan context s\u0131n\u0131f\u0131 normalde &#8220;DbContext&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretilmesi gerekiyordu. Lakin biz sistemimizde Identity kulland\u0131\u011f\u0131m\u0131zdan dolay\u0131 bu identity yap\u0131s\u0131n\u0131n kar\u015f\u0131l\u0131\u011f\u0131n\u0131 veritaban\u0131nda olu\u015fturtmam\u0131z gerekmektedir ve bunu &#8220;IdentityDbContext&#8221; s\u0131n\u0131f\u0131 ile ger\u00e7ekle\u015ftirebilmekteyiz. Dolay\u0131s\u0131yla context s\u0131n\u0131f\u0131n\u0131n hangi identity ile birlikte \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirtebilmek i\u00e7in &#8220;IdentityDbContext&#8221; s\u0131n\u0131f\u0131ndan t\u00fcretilmektedir. Ve dikkat edilirse generic olarak bu identity yap\u0131lanmas\u0131n\u0131n taraf\u0131m\u0131zca olu\u015fturulan &#8220;AppUser&#8221; isimli s\u0131n\u0131f ile ger\u00e7ekle\u015ftirildi\u011fini belirtmi\u015f oluyoruz.<\/p>\n<p>Context s\u0131n\u0131f\u0131n\u0131 in\u015fa ettikten sonra migrate i\u015flemi neticesinde hedef sunucu provider\u0131n\u0131 &#8220;appsettings.json&#8221; dosyas\u0131nda a\u015fa\u011f\u0131daki \u015fekilde belirleyelim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;ConnectionStrings&quot;: {\r\n    &quot;SqlServerConnectionString&quot;: &quot;Server=.;Database=IdentityExampleDb;Trusted_Connection=True;&quot;\r\n  },\r\n  &quot;Logging&quot;: {\r\n    &quot;LogLevel&quot;: {\r\n      &quot;Default&quot;: &quot;Warning&quot;\r\n    }\r\n  },\r\n  &quot;AllowedHosts&quot;: &quot;*&quot;\r\n}\r\n<\/pre>\n<h4 style=\"color:red;\">Ad\u0131m 3<\/h4>\n<p>Art\u0131k uygulamada in\u015fa edilen bu identity yap\u0131lanmas\u0131 &#8220;Startup.cs&#8221; s\u0131n\u0131f\u0131 \u00fczerinden uygulamaya dahil edilmelidir. Bunun i\u00e7in a\u015fa\u011f\u0131daki \u00e7al\u0131\u015fma yeterlidir&#8230;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public class Startup\r\n    {\r\n        public IConfiguration Configuration { get; set; }\r\n        public Startup(IConfiguration configuration) =&gt; Configuration = configuration;\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddDbContext&lt;AppDbContext&gt;(_ =&gt; _.UseSqlServer(Configuration&#x5B;&quot;ConnectionStrings:SqlServerConnectionString&quot;]));\r\n            services.AddIdentity&lt;AppUser, IdentityRole&gt;().AddEntityFrameworkStores&lt;AppDbContext&gt;();\r\n            services.AddMvc();\r\n        }\r\n\r\n        public void Configure(IApplicationBuilder app, IHostingEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n                app.UseDeveloperExceptionPage();\r\n\r\n            app.UseStatusCodePages();\r\n            app.UseStaticFiles();\r\n            app.UseAuthentication();\r\n            app.UseMvc(_ =&gt; _.MapRoute(&quot;Default&quot;, &quot;{controller=Home}\/{action=Index}\/{id?}&quot;));\r\n        }\r\n    }\r\n<\/pre>\n<p><strong><em>7. sat\u0131r<\/em><\/strong>&#8216;da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere uygulamaya geli\u015ftirdi\u011fimiz context nesnesi DbContext olarak tan\u0131t\u0131lmaktad\u0131r.<\/p>\n<p><em><strong>8. sat\u0131r<\/strong><\/em>&#8216;da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere ise uygulamaya identity yap\u0131lanmas\u0131na dair gerekli entegrasyonu &#8220;AddIdentity&#8221; metodu ile ger\u00e7ekle\u015ftirmekteyiz. Dikkat ederseniz generic olarak birinci parametreye bu identity yap\u0131lanmas\u0131n\u0131n kullanaca\u011f\u0131 IdentityUser yap\u0131lanmas\u0131n\u0131 istemektedir. Bunun i\u00e7in taraf\u0131m\u0131zdan &#8220;AppUser&#8221; s\u0131n\u0131f\u0131 verilmi\u015ftir. Lakin ikinci parametreye ise taraf\u0131m\u0131zca herhangi bir IdentityRole s\u0131n\u0131f\u0131ndan t\u00fcreyen s\u0131n\u0131f in\u015fa edilmedi\u011finden dolay\u0131 direkt olarak &#8220;IdentityRole&#8221; s\u0131n\u0131f\u0131 verilmi\u015ftir. Yani anlayaca\u011f\u0131n\u0131z temelde biz sadece IdentityUser s\u0131n\u0131f\u0131ndan t\u00fcreyen &#8220;AppUser&#8221; s\u0131n\u0131f\u0131n\u0131 in\u015fa ederek en temel \u00fcyelik y\u00f6netimi yap\u0131lanmas\u0131n\u0131 ger\u00e7ekle\u015ftirmi\u015f bulunmaktay\u0131z. Buradaki i\u015flem neticesinde &#8220;AddEntityFrameworkStores&#8221; generic metodu sayesinde &#8220;AppDbContext&#8221; isminde olu\u015fturdu\u011fumuz contexte \u00f6zel depolama ger\u00e7ekle\u015ftirmi\u015f bulunmaktay\u0131z.<\/p>\n<p>Ayr\u0131ca <strong><em>19. sat\u0131r<\/em><\/strong>&#8216;da &#8220;UseAuthentication&#8221; metodu sayesinde uygulaman\u0131n identity ile kimlik do\u011frulamas\u0131 ger\u00e7ekle\u015ftirece\u011fini belirtmi\u015f bulunmaktay\u0131z.<\/p>\n<p>Evet&#8230;<\/p>\n<p>Bu i\u015flemler neticesinde art\u0131k uygulamam\u0131zda bir Identity altyap\u0131s\u0131 mevcut hale getirilmi\u015ftir. \u015eimdi Code First yakla\u015f\u0131m\u0131 ile migrationlar\u0131 olu\u015fturup veritaban\u0131m\u0131z\u0131 sunucuya migrate edelim. <span style=\"font-size:11px;\">Asp.NET Core uygulamalar\u0131nda migration i\u015flemlerini tam teferruatl\u0131 inceleyebilmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-2-mvcde-migrations-ile-veritabani-islemleri\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET Core 2 MVC\u2019de Migrations \u0130le Veritaban\u0131 \u0130\u015flemleri<\/a> ba\u015fl\u0131kl\u0131 makaleye g\u00f6z atabilirsiniz.<\/span><\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ndotnet ef migrations add mig_1\r\ndotnet ef database update\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-1.jpg\" alt=\"Asp.NET Core Identity \u2013 Alt Yap\u0131 Kurulumu - II\" width=\"620\" height=\"1031\" class=\"aligncenter size-full wp-image-11619\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-1.jpg 620w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-1-180x300.jpg 180w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-1-616x1024.jpg 616w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/a><br \/>\nBu i\u015flem neticesinde migrate edilen veritaban\u0131 ve olu\u015fturulan tablolar\u0131 a\u015fa\u011f\u0131daki g\u00f6rselde oldu\u011fu gibidir;<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/Asp.NET-Core-Identity-\u2013-Alt-Yap\u0131-Kurulumu-II-2.jpg\" alt=\"Asp.NET Core Identity \u2013 Alt Yap\u0131 Kurulumu - II\" width=\"208\" height=\"272\" class=\"aligncenter size-full wp-image-11621\" \/><\/a><\/p>\n<p>Netice olarak; bu i\u00e7eri\u011fimizde sadece \u00fcyeleri temsil edecek olan s\u0131n\u0131f\u0131 in\u015fa ederek IdentityDbContext nesnesi olu\u015fturmay\u0131, Startup s\u0131n\u0131f\u0131na Identity mimarisini entegre ederek projeye t\u00fcm bu yap\u0131lanmayla aya\u011fa kald\u0131rmay\u0131 incelemi\u015f olduk. Yani uzun laf\u0131n k\u0131sas\u0131 bir projede en sade haliyle Identity mimarisinin nas\u0131l kuruldu\u011funu g\u00f6rm\u00fc\u015f olduk.<\/p>\n<p>Sonraki makalemizde ise neticede olu\u015fturulan veritaban\u0131nda Identity mimarisine \u00f6zel tablolar\u0131 inceleyece\u011fiz. O halde \u015fimdilik g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not : \u00d6rnek projeyi indirmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/08\/AspNetCoreIdentityExample.zip\">buraya t\u0131klay\u0131n\u0131z<\/a>.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bir \u00f6nceki Asp.NET Core Identity \u2013 Nedir ve Temel Kavramlar? \u2013 I ba\u015fl\u0131kl\u0131 i\u00e7eri\u011fimizde Asp.NET Core Identity k\u00fct\u00fcphanesine dair teorik olarak bir giri\u015f yapm\u0131\u015ft\u0131k. Bu i\u00e7eri\u011fimizde ise bir Asp.NET Core uygulamas\u0131nda Identity alt&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":11583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2668,2656,2811,2832,2898],"tags":[2953,100,2966,2967,2952,2962,2954,2965,2964,2963,2968],"class_list":["post-11590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core-2","category-asp-net-core-2-mvc","category-asp-net-core-2-1","category-asp-net-core-2-2","category-asp-net-core-3-0","tag-net-core-identity","tag-identity","tag-addentityframeworkstores","tag-addidentity","tag-asp-net-core-identity","tag-asp-net-core-identity-kurulumu","tag-asp-net-identity","tag-identitydbcontext","tag-identityrole","tag-identityuser","tag-useauthentication"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=11590"}],"version-history":[{"count":38,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11590\/revisions"}],"predecessor-version":[{"id":11634,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/11590\/revisions\/11634"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/11583"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=11590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=11590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=11590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}