将身份验证和标识迁移到 ASP.NET CoreMigrate Authentication and Identity to ASP.NET Core
本文内容
作者:Steve Smith
在前面的文章中,我们已将配置从 ASP.NET mvc 项目迁移到 ASP.NET CORE mvc。本文将迁移注册、登录和用户管理功能。
配置标识和成员身份Configure Identity and Membership
在 ASP.NET MVC 中,身份验证和标识功能是使用Startup.Auth.cs和IdentityConfig.cs中的 ASP.NET Identity 配置的,位于App_Start文件夹中。在 ASP.NET Core MVC 中,这些功能在Startup.cs中进行配置。
安装以下 NuGet 包:
Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.Cookies
Microsoft.EntityFrameworkCore.SqlServer
在Startup.cs中,更新 Startup.ConfigureServices
方法以使用实体框架和标识服务:
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();
}
此时,在上面的代码中引用了两种类型,但尚未从 ASP.NET MVC 项目迁移 ApplicationDbContext
和 ApplicationUser
。在 ASP.NET Core 项目中创建新的 "模型" 文件夹,并将两个与这些类型对应的类添加到其中。你将在 /Models/IdentityModels.cs中找到这些类的 ASP.NET 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 初学者 Web 项目不包括很多自定义用户或 ApplicationDbContext
。迁移实际应用时,还需要迁移应用的用户和 DbContext
类的所有自定义属性和方法,以及应用所使用的任何其他模型类。例如,如果 DbContext
具有 DbSet<Album>
,则需要迁移 Album
类。
在这些文件准备就绪后,可以通过更新 using
语句来编译Startup.cs文件:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
现在,我们的应用程序已准备好支持身份验证和标识服务。只需将这些功能公开给用户。
迁移注册和登录逻辑Migrate registration and login logic
对于使用实体框架和 SQL Server 配置的应用和数据访问配置的标识服务,我们已准备好添加注册和登录到应用的支持。请记住,在迁移过程中,我们已注释掉对 Layout_中 LoginPartial_的引用。现在可以返回到该代码,取消注释,并添加必要的控制器和视图以支持登录功能。
取消注释 _Layout中的 @Html.Partial
行:
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
@*@Html.Partial("_LoginPartial")*@
</div>
</div>
现在,将名为 _LoginPartial的新 Razor 视图添加到Views/Shared文件夹:
用以下代码更新 _LoginPartial. # (替换其所有内容):
@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>
}
此时,您应该能够在浏览器中刷新站点。
总结Summary
ASP.NET Core 引入 ASP.NET 标识功能更改。在本文中,你看到了如何将 ASP.NET 标识的身份验证和用户管理功能迁移到 ASP.NET Core。