Kimlik Doğrulamasını ve Identity ASP.NET Core'a geçirme

Tarafından Steve Smith

Önceki makalede, yapılandırmayı bir ASP.NET MVC projesinden ASP.NET Core MVC'ye geçirdik. Bu makalede kayıt, oturum açma ve kullanıcı yönetimi özelliklerini geçiririz.

Yapılandırma Identity ve Üyelik

ASP.NET MVC'de kimlik doğrulaması ve kimlik özellikleri, App_Start IdentityStartup.Auth.cs klasöründe bulunan ve IdentityConfig.csiçindeki ASP.NET kullanılarak yapılandırılır. ASP.NET Core MVC'de bu özellikler içinde Startup.csyapılandırılır.

Aşağıdaki NuGet paketlerini yükleyin:

  • Microsoft.AspNetCore.Identity.EntityFrameworkCore
  • Microsoft.AspNetCore.Authentication.Cookies
  • Microsoft.EntityFrameworkCore.SqlServer

içindeStartup.cs, Entity Framework ve Identity hizmetleri kullanmak için yöntemini güncelleştirinStartup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    // Add EF services to the services container.
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

     services.AddMvc();
}

Bu noktada, yukarıdaki kodda ASP.NET MVC projesinden henüz geçirmediğimiz iki tür vardır: ApplicationDbContext ve ApplicationUser. ASP.NET Core projesinde yeni bir Models klasörü oluşturun ve bu türlere karşılık gelen iki sınıf ekleyin. Bu sınıfların ASP.NET MVC sürümlerini içinde /Models/IdentityModels.csbulacaksınız, ancak bu daha açık olduğu için geçirilen projede sınıf başına bir dosya kullanacağız.

ApplicationUser.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;

namespace NewMvcProject.Models
{
    public class ApplicationUser : IdentityUser
    {
    }
}

ApplicationDbContext.cs:

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.Data.Entity;

namespace NewMvcProject.Models
{
    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            // Customize the ASP.NET Core Identity model and override the defaults if needed.
            // For example, you can rename the ASP.NET Core Identity table names and more.
            // Add your customizations after calling base.OnModelCreating(builder);
        }
    }
}

ASP.NET Core MVC Starter Web projesi, kullanıcıların veya öğesinin çok fazla özelleştirmesini ApplicationDbContextiçermez. Gerçek bir uygulamayı geçirirken, uygulamanızın kullanıcı ve sınıflarının tüm özel özelliklerini ve yöntemlerinin DbContext yanı sıra uygulamanızın kullandığı diğer Model sınıflarını da geçirmeniz gerekir. Örneğin, bir varsa DbContextDbSet<Album>sınıfını Album geçirmeniz gerekir.

Bu dosyalar mevcutken, Startup.cs dosya deyimleri using güncelleştirilerek derlenecek şekilde oluşturulabilir:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

Uygulamamız artık kimlik doğrulamasını ve Identity hizmetleri desteklemeye hazırdır. Yalnızca bu özelliklerin kullanıcılara açık olması gerekir.

Kayıt ve oturum açma mantığını geçirme

Identity Uygulama için yapılandırılan hizmetler ve Entity Framework ve SQL Server kullanılarak yapılandırılan veri erişimiyle, uygulamada kayıt ve oturum açma desteği eklemeye hazırız. Geçiş işleminin önceki bölümlerinde içindeki _LoginPartial_Layout.cshtmlbir başvuruyu açıklama satırına eklediğimizi hatırlayın. Şimdi bu koda dönmenin, açıklamayı kaldırmanın ve oturum açma işlevselliğini desteklemek için gerekli denetleyicileri ve görünümleri eklemenin zamanı geldi.

içindeki satırın açıklamasını @Html.Partial_Layout.cshtmlkaldırın:

      <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    </ul>
    @*@Html.Partial("_LoginPartial")*@
  </div>
</div>

Şimdi Görünümler/Paylaşılan klasörüne _LoginPartial adlı yeni Razor bir görünüm ekleyin:

Aşağıdaki kodla güncelleştirin _LoginPartial.cshtml (tüm içeriğini değiştirin):

@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
            </li>
        </ul>
    </form>
}
else
{
    <ul class="nav navbar-nav navbar-right">
        <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
        <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
    </ul>
}

Bu noktada, tarayıcınızda siteyi yenileyebilmeniz gerekir.

Özet

ASP.NET Core, ASP.NET Identity özelliklerinde değişiklikler sunar. Bu makalede, ASP.NET kimlik doğrulaması ve kullanıcı yönetimi özelliklerini ASP.NET Identity Core'a geçirmeyi öğrendiniz.