ASP.NET Core Identity 从零开始

在本文中,将创建一个项目并设置数据库以使用ASP.NET Core Identity。将从一个空项目开始,逐步构建项目上的特性。

将从ASP.NET Core 2.0和Visual Studio 15.4.3开始,创建一个空的ASP.NET Core 2.0 Web项目。将从零开始,以便能够确切地理解ASP.NET Core Identity的工作原理。

空项目没有太多内容。关于它,需要知道的关键事情有:

Program.cs - 此文件中的代码基本上定义了Web服务器和启动类。

Startup.cs - 在此类中定义请求处理管道并配置服务。

ConfigureServices方法中,配置应用程序中使用的服务,如Entity Framework、Identity等。

public void ConfigureServices(IServiceCollection services) { }

Configure方法中,使用中间件配置请求处理管道。

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }

随着逐步完成本文,将对这两个方法进行修改。

ASP.NET Core 2.0的另一个有趣之处在于它有一个.csproj文件,而不是project.json文件。可以通过在解决方案资源管理器中右键单击项目节点并选择“编辑 (ProjectName).csproj”来打开.csproj文件。

如果打开.csproj文件,将发现Microsoft.AspNetCore.All元包在这里被引用。所有ASP.NET Core 2.x和Entity Framework Core 2.x所需的NuGet包都包含在Microsoft.AspNetCore.All包中。

准备模型

Microsoft.AspNetCore.Identity命名空间定义了以下用户管理模型:

  • IdentityUser
  • IdentityRole
  • IdentityUserRole
  • IdentityUserClaim
  • IdentityUserLogin
  • IdentityUserToken
  • IdentityRoleClaim

可以直接在应用程序中使用这些类(在大多数情况下,会这样做)。但也可以定义自己的类并继承它们。让扩展IdentityUser类并为此模型添加FirstNameLastName

为此,让向解决方案中添加一个名为Models的文件夹。添加一个名为ApplicationUser的类,该类继承自IdentityUser

public class ApplicationUser : IdentityUser { public string FirstName { get; set; } public string LastName { get; set; } }

准备Entity Framework

在开始下一步之前,将向解决方案中添加一个appsettings.json文件。默认情况下,它应该添加一个连接字符串,如下所示:

{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true" } }

让将数据库名称从_CHANGE_ME更改为IdentityDemo或其他更有意义的名称。

准备Entity Framework

ASP.NET Core Identity附带了Entity Framework Core Identity包,该包具有将用户信息存储在SQL Server数据库中的EF核心实现。

Microsoft.AspNetCore.Identity.EntityFrameworkCore命名空间实现了IdentityDbContext<TUser>,它继承自DbContext。这个类为所有身份模型提供了现成的DbSet

因此,可以创建ApplicationDbContext,它继承自IdentityDbContext<ApplicationUser>

让向解决方案中添加一个名为Data的文件夹,并将ApplicationDbContext类添加到此文件夹中。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { } protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); } }

准备服务和中间件

在前面的步骤中,似乎没有在ApplicationDbContext类中使用任何连接字符串。相反,使用依赖注入注入了DbContextOptions。记住必须在Startup类的ConfigureServices方法中配置这个。

必须做的另一件重要事情是配置与ASP.NET Core Identity相关的服务,以便进行依赖注入。最终的ConfigureServices方法将如下所示:

public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString( "DefaultConnection"))); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); }

最后,必须将身份添加到请求管道中。为此,必须在Configure方法的末尾添加以下行。

app.UseAuthentication();

这行代码将身份验证中间件添加到请求管道中。

要使用EF Core创建数据库,需要迁移。为此,请安装以下包:

Install-package Microsoft.EntityFrameworkCore.Tools

确保.csproj文件如下所示:

<ItemGroup> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> </ItemGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" /> </ItemGroup>

现在要创建一个名为initial的迁移,请在.csproj文件所在的文件夹中运行以下命令。

dotnet ef migrations add Initial

现在,运行以下命令以创建数据库:

dotnet ef database update
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485