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 ověřování a identity funkce konfigurují pomocí ASP.NET Identity v Startup.Auth.cs
a IdentityConfig.cs
ve slož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
Upozorňující
Tento článek ukazuje použití připojovací řetězec. U místní databáze nemusí být uživatel ověřený, ale v produkčním prostředí připojovací řetězec někdy obsahují heslo k ověření. Přihlašovací údaje vlastníka prostředku (ROPC) jsou bezpečnostní riziko, kterému byste se měli vyhnout v produkčních databázích. Produkční aplikace by měly používat nejbezpečnější dostupný tok ověřování. Další informace o ověřování pro aplikace nasazené do testovacího nebo produkčního prostředí najdete v tématu Zabezpečené toky ověřování.
V Startup.cs
aplikaci 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.cs
MVC, 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.