Migrace ověřování a Identity ASP.NET Core

Autor: Steve Smith

V předchozím článku jsme migrovali konfiguraci z projektu ASP.NET MVC do ASP.NET Core MVC. V tomto článku migrujeme funkce registrace, přihlášení a správy uživatelů.

Konfigurace Identity a členství

V ASP.NET MVC se funkce ověřování a identity konfigurují pomocí ASP.NET Identity ve Startup.Auth.csIdentityConfig.cssložce App_Start. V ASP.NET Core MVC jsou tyto funkce nakonfigurované v Startup.cs.

Nainstalujte následující balíčky NuGet:

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

V Startup.csaplikaci aktualizujte metodu Startup.ConfigureServices tak, aby používala Entity Framework a Identity služby:

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

V tomto okamžiku existují dva typy odkazované ve výše uvedeném kódu, které jsme ještě nemigrovali z projektu ASP.NET MVC: ApplicationDbContext a ApplicationUser. V projektu ASP.NET Core vytvořte novou složku Models a přidejte do ní dvě třídy odpovídající těmto typům. V ASP.NET verzích těchto tříd najdete ASP.NET /Models/IdentityModels.csMVC, ale v migrovaném projektu použijeme jeden soubor pro každou třídu, protože je to jasnější.

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

Webový projekt ASP.NET Core MVC Starter neobsahuje mnoho přizpůsobení uživatelů ani ApplicationDbContext. Při migraci skutečné aplikace musíte také migrovat všechny vlastní vlastnosti a metody uživatele a DbContext tříd vaší aplikace a také všechny ostatní třídy modelu, které vaše aplikace využívá. Pokud například máte DbContext , DbSet<Album>musíte migrovat Album třídu.

S těmito soubory Startup.cs je možné soubor zkompilovat aktualizací jeho using příkazů:

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

Naše aplikace je teď připravená podporovat ověřování a Identity služby. Tyto funkce musí mít jenom vystavené uživatelům.

Migrace logiky registrace a přihlášení

Se službami Identity nakonfigurovanými pro aplikaci a přístup k datům nakonfigurovanými pomocí Entity Frameworku a SQL Serveru jsme připraveni přidat podporu registrace a přihlášení k aplikaci. Vzpomeňte si, že dříve v procesu migrace jsme okomentovali odkaz na _LoginPartial v _Layout.cshtml. Teď je čas se k ho vrátit, odkomentovat ho a přidat do potřebných kontrolerů a zobrazení pro podporu funkce přihlášení.

Odkomentujte @Html.Partial řádek v _Layout.cshtml:

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

Teď do složky Views/Shared přidejte nové Razor zobrazení s názvem _LoginPartial:

Aktualizujte _LoginPartial.cshtml následujícím kódem (nahraďte veškerý jeho obsah):

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

V tomto okamžiku byste měli být schopni aktualizovat web v prohlížeči.

Shrnutí

ASP.NET Core zavádí změny funkcí ASP.NET Identity . V tomto článku jste se naučili migrovat funkce ověřování a správy uživatelů ASP.NET Identity na ASP.NET Core.