Миграция проверки подлинности и Identity ASP.NET Core

Автор: Стив Смит (Steve Smith)

В предыдущей статье мы переносили конфигурацию из проекта MVC ASP.NET в ASP.NET Core MVC. В этой статье мы переносим функции регистрации, входа и управления пользователями.

Настройка Identity и членство

В ASP.NET MVC функции проверки подлинности и удостоверений настраиваются с помощью ASP.NET Identity в Startup.Auth.cs папке IdentityConfig.csApp_Start. В ASP.NET Core MVC эти функции настраиваются в Startup.cs.

Установите следующие пакеты NuGet:

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

В Startup.cs, обновите Startup.ConfigureServices метод для использования Entity Framework и Identity служб:

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

На этом этапе в приведенном выше коде есть два типа, на которые мы еще не перенесены из проекта MVC ASP.NET: ApplicationDbContext и ApplicationUser. Создайте папку Models в проекте ASP.NET Core и добавьте в него два класса, соответствующие этим типам. Вы найдете ASP.NET версии этих классов /Models/IdentityModels.csMVC, но мы будем использовать один файл для каждого класса в перенесенном проекте, так как это более ясно.

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 Не включает много настроек пользователей или ApplicationDbContext. При миграции реального приложения также необходимо перенести все пользовательские свойства и методы пользователей и DbContext классов приложения, а также любые другие классы модели, которые использует ваше приложение. Например, если у вас DbContext есть DbSet<Album>, необходимо перенести Album класс.

На месте эти файлы можно выполнить компиляцию, Startup.cs обновив его using инструкции:

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

Теперь наше приложение готово для поддержки проверки подлинности и Identity служб. Он просто должен иметь эти функции, предоставляемые пользователям.

Миграция логики регистрации и входа

С Identity помощью служб, настроенных для доступа к приложению и данным, настроенным с помощью Entity Framework и SQL Server, мы готовы добавить поддержку регистрации и входа в приложение. Помните, что ранее в процессе миграции мы закомментировали ссылку на _LoginPartial в _Layout.cshtml. Теперь пришло время вернуться к этому коду, раскомментировать его и добавить в необходимые контроллеры и представления для поддержки функций входа.

Раскомментируйте @Html.Partial строку в _Layout.cshtml:

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

Теперь добавьте новое Razor представление с именем _LoginPartial в папку Views/Shared :

Обновите _LoginPartial.cshtml следующий код (замените все его содержимое):

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

На этом этапе вы сможете обновить сайт в браузере.

Итоги

ASP.NET Core вводит изменения в функции ASP.NET Identity . В этой статье описано, как перенести функции проверки подлинности и управления пользователями ASP.NET в ASP.NET Identity Core.