首页>教程>.NET Core>将身份验证和 Identity 迁移到 ASP.NET Core

此组别内的文章

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

将身份验证和 Identity 迁移到 ASP.NET Core

内容纲要

在本文中,我们将迁移注册、登录和用户管理功能。

配置 Identity 和成员身份

在 ASP.NET MVC 中,身份验证和标识功能是在 Startup.Auth.cs 和 Config.cs 中(位于 App_Start 文件夹中)使用 ASP.NET Identity 配置的。 在 ASP.NET Core MVC 中,这些功能在 Startup.cs 中配置。

安装以下 NuGet 包:

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

在 Startup.cs 中,更新 方法以使用 Entity Framework 和 Identity 服务:C#复制

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // Add EF services to the services container.
  4. services.AddDbContext<ApplicationDbContext>(options =>
  5. options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
  6. services.AddIdentity<ApplicationUser, IdentityRole>()
  7. .AddEntityFrameworkStores<ApplicationDbContext>()
  8. .AddDefaultTokenProviders();
  9. services.AddMvc();
  10. }

此时,上述代码中引用了两种尚未从 ASP.NET MVC 项目迁移的类型:ApplicationDbContext 和 ApplicationUser。 在 ASP.NET Core 项目中创建一个新的 Models 文件夹,并向其中添加与这些类型相对应的两个类。 你可以在 /Models/Models.cs 中找到这些类的 ASP.NET MVC 版本,但我们将在迁移的项目中为每个类使用一个文件,因为这样更清楚。

ApplicationUser.cs:C#复制

  1. using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
  2. namespace NewMvcProject.Models
  3. {
  4. public class ApplicationUser : IdentityUser
  5. {
  6. }
  7. }

ApplicationDbContext.cs:C#复制

  1. using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
  2. using Microsoft.Data.Entity;
  3. namespace NewMvcProject.Models
  4. {
  5. public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
  6. {
  7. public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
  8. : base(options)
  9. {
  10. }
  11. protected override void OnModelCreating(ModelBuilder builder)
  12. {
  13. base.OnModelCreating(builder);
  14. // Customize the ASP.NET Core Identity model and override the defaults if needed.
  15. // For example, you can rename the ASP.NET Core Identity table names and more.
  16. // Add your customizations after calling base.OnModelCreating(builder);
  17. }
  18. }
  19. }

ASP.NET Core MVC 入门版 Web 项目包含的用户或 ApplicationDbContext 自定义项不多。 迁移实际应用时,还需要迁移应用的用户和 DbContext 类的所有自定义属性和方法,以及应用使用的任何其他 Model 类。 例如,如果 DbContext 有一个 DbSet<Album>,则需要迁移 Album 类。

有了这些文件,就可以通过更新 语句来编译 Startup.cs 文件:C#复制

  1. using Microsoft.AspNetCore.Builder;
  2. using Microsoft.AspNetCore.Identity;
  3. using Microsoft.AspNetCore.Hosting;
  4. using Microsoft.EntityFrameworkCore;
  5. using Microsoft.Extensions.Configuration;
  6. using Microsoft.Extensions.DependencyInjection;

我们的应用现在可以支持身份验证和 Identity 服务。 它只需向用户公开这些功能。

迁移注册和登录逻辑

为使用 Entity Framework 和 SQL Server 配置的应用和数据访问配置 Identity 服务后,就可以添加对应用注册和登录的支持。 回想一下,在迁移过程的早期,我们在 _Layout.cshtml 中注释掉了对 _LoginPartial 的引用。 现在,可以返回该代码,取消注释,并添加必要的控制器和视图来支持登录功能。

取消注释 _Layout.cshtml 中的 @Html.Partial 行:CSHTML复制

  1. <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
  2. </ul>
  3. @*@Html.Partial("_LoginPartial")*@
  4. </div>
  5. </div>

现在,将名为 _LoginPartial 的新 Razor 视图添加到 Views/Shared 文件夹:

使用以下代码更新 _LoginPartial.cshtml(替换其所有内容):CSHTML复制

  1. @inject SignInManager<ApplicationUser> SignInManager
  2. @inject UserManager<ApplicationUser> UserManager
  3. @if (SignInManager.IsSignedIn(User))
  4. {
  5. <form asp-area="" asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
  6. <ul class="nav navbar-nav navbar-right">
  7. <li>
  8. <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
  9. </li>
  10. <li>
  11. <button type="submit" class="btn btn-link navbar-btn navbar-link">Log out</button>
  12. </li>
  13. </ul>
  14. </form>
  15. }
  16. else
  17. {
  18. <ul class="nav navbar-nav navbar-right">
  19. <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
  20. <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
  21. </ul>
  22. }

此时,你应该能够在浏览器中刷新站点。

摘要

ASP.NET Core 引入了对 ASP.NET Identity 功能的更改。 在本文中,你已了解如何将 ASP.NET Identity 的身份验证和用户管理功能迁移到 ASP.NET Core。

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
今日签到
私信列表
搜索