Bagikan melalui


Memigrasikan Autentikasi dan Identity ke ASP.NET Core

Oleh Steve Smith

Di artikel sebelumnya, kami memigrasikan konfigurasi dari proyek MVC ASP.NET ke ASP.NET Core MVC. Dalam artikel ini, kami memigrasikan fitur pendaftaran, login, dan manajemen pengguna.

Mengonfigurasi Identity dan Keanggotaan

Di ASP.NET MVC, fitur autentikasi dan identitas dikonfigurasi menggunakan ASP.NET Identity di Startup.Auth.cs dan IdentityConfig.cs, yang terletak di folder App_Start . Dalam ASP.NET Core MVC, fitur-fitur ini dikonfigurasi di Startup.cs.

Instal paket NuGet berikut:

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

Di Startup.cs, perbarui Startup.ConfigureServices metode untuk menggunakan Kerangka Kerja Entitas dan Identity layanan:

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();
}

Pada titik ini, ada dua jenis yang dirujuk dalam kode di atas yang belum kami migrasikan dari proyek MVC ASP.NET: ApplicationDbContext dan ApplicationUser. Buat folder Model baru di proyek ASP.NET Core, dan tambahkan dua kelas yang sesuai dengan jenis ini. Anda akan menemukan versi MVC ASP.NET dari kelas ini di /Models/IdentityModels.cs, tetapi kami akan menggunakan satu file per kelas dalam proyek yang dimigrasikan karena itu lebih jelas.

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);
        }
    }
}

Proyek Web Starter MVC Core ASP.NET tidak menyertakan banyak penyesuaian pengguna, atau ApplicationDbContext. Saat memigrasikan aplikasi nyata, Anda juga perlu memigrasikan semua properti dan metode kustom pengguna dan DbContext kelas aplikasi Anda, serta kelas Model lainnya yang digunakan aplikasi Anda. Misalnya, jika Anda DbContext memiliki DbSet<Album>, Anda perlu memigrasikan Album kelas.

Dengan file-file ini di tempat, Startup.cs file dapat dibuat untuk dikompilasi dengan memperbarui pernyataannya using :

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

Aplikasi kami sekarang siap untuk mendukung autentikasi dan Identity layanan. Ini hanya perlu memiliki fitur-fitur ini yang diekspos ke pengguna.

Memigrasikan logika pendaftaran dan login

Dengan Identity layanan yang dikonfigurasi untuk aplikasi dan akses data yang dikonfigurasi menggunakan Entity Framework dan SQL Server, kami siap untuk menambahkan dukungan untuk pendaftaran dan masuk ke aplikasi. Ingat bahwa sebelumnya dalam proses migrasi, kami mengomentari referensi ke _LoginPartial di _Layout.cshtml. Sekarang saatnya untuk kembali ke kode tersebut, membatalkan komentar, dan menambahkan pengontrol dan tampilan yang diperlukan untuk mendukung fungsionalitas masuk.

Batalkan @Html.Partial komentar baris di _Layout.cshtml:

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

Sekarang, tambahkan tampilan baru Razor yang disebut _LoginPartial ke folder Tampilan/Bersama :

Perbarui _LoginPartial.cshtml dengan kode berikut (ganti semua kontennya):

@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>
}

Pada titik ini, Anda harus dapat me-refresh situs di browser Anda.

Ringkasan

ASP.NET Core memperkenalkan perubahan pada fitur ASP.NET Identity . Dalam artikel ini, Anda telah melihat cara memigrasikan fitur autentikasi dan manajemen pengguna ASP.NET Identity ke ASP.NET Core.