Миграция проверки подлинности и Identity ASP.NET Core
Автор: Стив Смит (Steve Smith)
В предыдущей статье мы переносили конфигурацию из проекта MVC ASP.NET в ASP.NET Core MVC. В этой статье мы переносим функции регистрации, входа и управления пользователями.
Настройка Identity и членство
В ASP.NET MVC проверка подлинности и identity функции настраиваются с помощью ASP.NET Identity в Startup.Auth.cs
папке App_Start.IdentityConfig.cs
В ASP.NET Core MVC эти функции настраиваются в Startup.cs
.
Установите следующие пакеты NuGet:
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.Cookies
Microsoft.EntityFrameworkCore.SqlServer
Предупреждение
В этой статье показано использование строка подключения. С локальной базой данных пользователь не должен пройти проверку подлинности, но в рабочей среде строка подключения иногда включают пароль для проверки подлинности. Учетные данные владельца ресурса (ROPC) — это риск безопасности, который следует избежать в рабочих базах данных. Рабочие приложения должны использовать самый безопасный поток проверки подлинности. Дополнительные сведения о проверке подлинности для приложений, развернутых в тестовых или рабочих средах, см. в разделе "Безопасные потоки проверки подлинности".
В 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.cs
MVC, но мы будем использовать один файл для каждого класса в перенесенном проекте, так как это более ясно.
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.
ASP.NET Core